本書では、 New Relic NerdGraph を使用して、 クラウド統合設定データ 、Amazon Web Services (AWS) や Microsoft Azure、Google Cloud Platform (GCP) などを照会・修正する方法を例として紹介します。 NerdGraph GraphiQL explorer を使用すると、 NRQL データ を照会することも可能です。
クラウド・インテグレーションの構成データを照会するためのこれらの例では、 GraphQL クエリとミューテーション を使用しています。
要件
NerdGraphでクラウドインテグレーションのデータを照会する前に、以下のことを確認してください。
- 指示に従い、 クラウド・インテグレーションとNew Relic を接続します。
 - Created an API key.
 
NerdGraph GraphiQL エクスプローラーにアクセスします。
NerdGraph GraphiQL エクスプローラーにアクセスするには、以下の手順に従います。
- api.newrelic.com/graphiql にアクセスしてください。
 - 以下の例のいずれかを追加します。
 
クエリの例
クエリとは、データを取得することだけを目的としたリクエストである(副作用はない)。NerdGraphのクエリは固定的なものではなく、必要に応じてより多くのデータを要求することも、より少ないデータを要求することも可能である。各クエリでは、スキーマでサポートされている限り、取得したいデータを正確に指定することができます。
このクエリは、インフラストラクチャ データで使用可能なすべてのプロバイダー アカウントのリストを返します。プロバイダーによっては、追加のプロパティを要求できます。たとえば、GCP の場合、新しい GCP プロジェクトを New Relic にリンクするときに必要なserviceAccountIdプロパティを要求することもできます。
Anonymous:
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        providers {          id          name          slug          ... on CloudGcpProvider {            serviceAccountId          }        }      }    }  }}Named:
query cloudProviders {  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        providers {          id          name          slug        }      }    }  }}このクエリは、AWS 統合の特定のプロバイダー アカウントに関する情報を返します。プロパティid 、 name 、 slugが、監視可能な統合のリストとともに要求されます。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        provider(slug: "aws") {          id          slug          name          services {            id            slug            name          }        }      }    }  }}このクエリは、プロバイダーの特定のクラウド サービス統合に関する情報を返します。この例では、統合はAWS ALB モニタリング統合であり、プロバイダーは AWS です。プロパティーid 、 name 、 slug 、およびisAllowedが、使用可能な構成パラメーターとともに要求されます。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        provider(slug: "aws") {          service(slug: "alb") {            id            name            slug            isEnabled          }        }      }    }  }}このクエリは、お客様の New Relic アカウントで有効になっているクラウドアカウントのリストを返します。(クラウドアカウントは、お客様のNew Relicアカウントと特定のプロバイダーのアカウントを関連付けて統合を行います)。同じNew Relicアカウントで複数のクラウドプロバイダーのアカウントを有効にすることができ、同じクラウドプロバイダーであっても有効にすることができます。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        linkedAccounts {          id          name          createdAt          provider {            id            name          }        }      }    }  }}このクエリは、プロパティname 、 providerId 、監視が有効になっているクラウド統合のリストなど、リンクされたアカウントに関する情報を返します。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        linkedAccount(id: LINKED_CLOUD_ACCOUNT_ID) {          name          provider {            id            name          }          integrations {            id            name            createdAt            updatedAt          }        }      }    }  }}このクエリは、すべてのプロバイダのクラウド・アカウントについて、監視されているすべての統合機能を返します。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        linkedAccounts {          name          provider {            id            name          }          integrations {            id            name            service {              id              name            }            createdAt            updatedAt          }        }      }    }  }}このクエリは、特定のリンクされたアカウントから特定の統合に関する情報を返します。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        linkedAccount(id: LINKED_CLOUD_ACCOUNT_ID) {          name          provider {            id            name          }          integration(id: INTEGRATION_ID) {            id            name            service {              id              name            }            createdAt            updatedAt          }        }      }    }  }}変異の例
ミューテーションは、サーバー上でデータを作成または更新するなどの副作用を意図したリクエストです。ミューテーションには、キーワードmutationとミューテーションの名前が必要です。NerdGraph のミューテーションは、可能なすべてのミューテーションのサブセットに制限されています。
このミューテーションにより、クラウド プロバイダー アカウントを New Relic アカウントにリンクし、1 つ以上のリンクされたアカウントを作成できます。1 つの特定のクラウド プロバイダー アカウント (例: aws ) を New Relic アカウントにリンクしたり、複数のクラウド プロバイダー アカウントを 1 つの New Relic アカウントにリンクしたりできます。
Required:
パラメーター
PROVIDER_ACCOUNT_NAMEは必須であり、空にすることはできません。New Relic アカウント内で一意である必要があります。その他のパラメーターはプロバイダー (AWS、GCP、および Azure) に固有であり、これも必須です。次のセクションでは、各プロバイダー アカウントに必要なパラメーターを確認できます。アカウントをリンクすると、
createdAtとupdatedAtの値が等しくなります。mutation {cloudLinkAccount(accounts: {accountId: YOUR_ACCOUNT_ID,aws: [{name: PROVIDER_ACCOUNT_NAME,# other parameters}]azure: [{name: PROVIDER_ACCOUNT_NAME,# other parameters}]gcp: [{name: PROVIDER_ACCOUNT_NAME,# other parameters}]}) {linkedAccounts {idnameauthLabelcreatedAtupdatedAt}}}}
この変異は、AWSプロバイダアカウントをNew Relicアカウントにリンクします。
mutation {  cloudLinkAccount(      accountId: YOUR_ACCOUNT_ID,      accounts: {        aws: [{          name: PROVIDER_ACCOUNT_NAME,          arn: AWS_ROLE_ARN        }]      }    ) {      linkedAccounts {        id        name        authLabel        createdAt        updatedAt      }    }  }}この変異は、CloudWatch Metric Streamsを通じてデータを送信しているAWSアカウントをNew Relicアカウントにリンクします。
mutation {  cloudLinkAccount(      accountId: YOUR_ACCOUNT_ID,      accounts: {        aws: [{          name: PROVIDER_ACCOUNT_NAME,          arn: AWS_ROLE_ARN,          metricCollectionMode: PUSH        }]      }    ) {      linkedAccounts {        id        name        authLabel        createdAt        updatedAt      }    }  }}この変異は、Microsoft Azure クラウドのサブスクリプションを New Relic アカウントにリンクします。
mutation {  cloudLinkAccount(    accountId: YOUR_ACCOUNT_ID    accounts: {      azure: [        {          name: PROVIDER_ACCOUNT_NAME          applicationId: AZURE_APP_ID          clientSecret: AZURE_APP_KEY          tenantId: AZURE_TENANT_ID          subscriptionId: AZURE_SUBSCRIPTION_ID        }      ]    }  ) {    linkedAccounts {      id      name      authLabel      createdAt      updatedAt    }  }}このミューテーションは、既存の Microsoft Azure アカウントのクライアント シークレットをローテーションします。
mutation {  cloudUpdateAccount(    accountId: YOUR_ACCOUNT_ID    accounts: {      azure: {        linkedAccountId: NR_LINKED_ACCOUNT_ID        clientSecret: AZURE_SECRET_TOKEN      }    }  ) {    linkedAccounts {      id      name      authLabel      createdAt      updatedAt    }  }}この変異は、GCPプロジェクトをNew Relicアカウントにリンクします。
mutation {  cloudLinkAccount(    accountId: YOUR_ACCOUNT_ID    accounts: {      gcp: [{ name: PROVIDER_ACCOUNT_NAME, projectId: GCP_PROJECT_ID }]    }  ) {    linkedAccounts {      id      name      authLabel      createdAt      updatedAt    }  }}この変更により、リンクされた 1 つ以上のプロバイダー アカウントの名前を変更できます。nameパラメーターは必須で、空にすることはできず、New Relic アカウント内で一意でなければなりません。
mutation {  cloudRenameAccount(    accountId: YOUR_ACCOUNT_ID    accounts: [      { id: LINKED_CLOUD_ACCOUNT_ID_1, name: PROVIDER_ACCOUNT_NAME }      { id: LINKED_CLOUD_ACCOUNT_ID_2, name: PROVIDER_ACCOUNT_NAME }    ]  ) {    linkedAccounts {      id      name    }  }}この変異により、既存のクラウドアカウントで1つまたは複数の特定のクラウド統合のモニタリングを有効にすることができます。この変異により、New Relic はプロバイダアカウントから有効化された統合のデータを記録します。プロバイダーアカウントごとに、利用可能なサービスに合わせた異なる入力パラメータにアクセスできます。
mutation {  cloudConfigureIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      PROVIDER_SLUG: {        INTEGRATION_SLUG: [          {            linkedAccountId: LINKED_CLOUD_ACCOUNT_ID            # other parameters          }        ]      }    }  ) {    integrations {      id      name      integration {        id        slug      }      ... on SqsIntegration {        awsRegions      }    }  }}多くのプロバイダーのアカウントがリンクされている場合、多くのクラウドのアカウントで同時に同じ統合を有効にすることができます。
操作の出力には、 GraphQLフラグメント を使用して、統合に特化した設定パラメータを得ることができます。
mutation {  cloudConfigureIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      PROVIDER_SLUG: {        INTEGRATION_SLUG: [          { linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_1 }          { linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_2 }        ]      }    }  ) {    integrations {      id      name      integration {        id        name      }      ... on SqsIntegration {        awsRegions      }    }  }}複数のクラウドアカウントが連携している場合は、連携している複数のクラウドアカウントで同時に複数の統合を有効にすることもできます。
操作の出力には、 GraphQL フラグメント を使用して、インテグレーション固有の設定パラメータを求めることができます。
mutation {  cloudConfigureIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      PROVIDER_SLUG_1: {        INTEGRATION_SLUG_1: [{ linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_1 }]        INTEGRATION_SLUG_2: [{ linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_2 }]      }      PROVIDER_SLUG_2: {        INTEGRATION_SLUG_3: [          { linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_3 }          { linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_4 }        ]      }    }  ) {    integrations {      id      name      service {        id        name      }      ... on SqsIntegration {        awsRegions      }    }  }}この変異では、1つ以上のクラウド統合を修正したり、1つ以上の構成パラメータを変更したりすることもできます。各サービスには、変更可能な特定のパラメータがあります。
型リスト ( awsRegionなど) のパラメーターについては、完全なリストを指定してください。操作の出力については、 GraphQL フラグメントを使用して、統合固有の構成パラメーターを要求できます。
mutation {  cloudConfigureIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      PROVIDER_SLUG: {        INTEGRATION_SLUG: [          {            linkedAccountId: LINKED_CLOUD_ACCOUNT_ID            metricsPollingInterval: NEW_POLLING_INTERVAL            PARAMETER_1: VALUE_1            PARAMETER_N: VALUE_N          }        ]      }    }  ) {    integrations {      id      name      service {        id        slug      }      ... on SqsIntegration {        metricsPollingInterval        PARAMETER_1        PARAMETER_N      }    }    errors {      type      message    }  }}この変異により、統合を無効にして、特定のクラウド統合のデータ収集を停止することができます。
mutation {  cloudDisableIntegration (    accountId: YOUR_ACCOUNT_ID,    integrations: {      : {        : [          { linkedAccountId: LINKED_CLOUD_ACCOUNT_ID }        ]      }    }  ) {    disabledIntegrations {      id      name      authLabel      provider {        id      }    }    errors {      type      message    }  }}この変異により、クラウドプロバイダーのアカウントをNew Relicアカウントからリンク解除できるようになりました。
注意
この操作は元に戻すことはできません。ただし、再びアカウントをリンクさせることはできますが、アカウントの履歴は失われます。
mutation {  cloudUnlinkAccount(    accountId: YOUR_ACCOUNT_ID    accounts: { linkedAccountId: LINKED_CLOUD_ACCOUNT_ID }  ) {    unlinkedAccounts {      id      name    }    errors {      type      message    }  }}AWSとの統合を有効にする
この例では、 AWS SQS の統合を使用しており、 AWS アカウントを New Relic に接続していることを想定しています。
AWSとの連携を有効にするには
アカウントに関するデータ、特に利用可能なプロバイダや作成済みのプロバイダ・アカウントを取得するためのクエリを送信します。
{  actor {    account(id: YOUR_ACCOUNT_ID) {      cloud {        providers {          id          name          slug        }        linkedAccounts {          name          integrations {            id            name          }        }      }    }  }}AWSプロバイダーのアカウントをリンクします。まだリンクされていない場合や、別のAWSアカウントをリンクしたい場合に使用します。
YOUR_ACCOUNT_IDパラメータで New Relic アカウント識別子を使用します。PROVIDER_ACCOUNT_NAMEでプロバイダ アカウントの名前を指定します。AWSアカウントからデータを取得するために使用するAWSロールのARNを含めます。
mutation {cloudLinkAccount(accountId: YOUR_ACCOUNT_IDaccounts: { aws: [{ name: PROVIDER_ACCOUNT_NAME, arn: AWS_ROLE_ARN }] }) {linkedAccounts {idnameauthLabelcreatedAtupdatedAt}errors {typemessage}}}
YOUR_ACCOUNT_IDパラメータで New Relic アカウント ID を使用し、 LINKED_CLOUD_ACCOUNT_IDパラメータ値でプロバイダー アカウントの ID を使用します。
mutation {  cloudConfigureIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      aws: { sqs: [{ linkedAccountId: LINKED_CLOUD_ACCOUNT_ID }] }    }  ) {    integrations {      id      name      service {        id        name      }    }    errors {      type      message    }  }}同じプロバイダー アカウントを持つ複数のアカウントがある場合、複数のプロバイダー アカウントで同時に同じ統合を有効にすることができます。YOUR_ACCOUNT_IDパラメータで New Relic アカウント ID を使用し、 LINKED_CLOUD_ACCOUNT_ID_Nパラメータ値でプロバイダー アカウントの ID を使用します。
mutation {  cloudConfigureIntegration (    accountId: YOUR_ACCOUNT_ID,    integrations: {      aws: {        sqs: [          {             linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_1           },           {             linkedAccountId: LINKED_CLOUD_ACCOUNT_ID_2,             configuration_param_1: value_1,             configuration_param_2: value_2           }        ]      }     }  }) {    integrations {      id      name      service {        id         name      }    }    errors {      type      message    }  }}AWS統合のポーリング間隔を変更する
この例では、 AWS SQS 統合を使っており、 AWS アカウントを New Relic に接続していることを想定しています。AWS統合のポーリング間隔を変更するには。
AWS SQS 統合のポーリング間隔を更新するには、 YOUR_ACCOUNT_IDパラメータで New Relic アカウント ID を使用し、 LINKED_ACCOUNT_IDパラメータ値でリンクされたプロバイダー アカウントのidを使用します。
mutation {  cloudConfigureIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      aws: {        sqs: [          {            linkedAccountId: LINKED_CLOUD_ACCOUNT_ID            metricsPollingInterval: 300          }        ]      }    }  ) {    integrations {      id      name      service {        id        slug      }      ... on SqsIntegration {        metricsPollingInterval      }    }    errors {      type      message    }  }}AWSとの連携を無効にする
この例では、 AWS SQS 統合を使っており、 AWS アカウントを New Relic に接続していることを想定しています。AWS統合を無効化するには
YOUR_ACCOUNT_IDパラメータで New Relic アカウント識別子を使用し、リンクされたクラウド アカウントの ID をLINKED_ACCOUNT_IDパラメータ値で使用します。
mutation {  cloudDisableIntegration(    accountId: YOUR_ACCOUNT_ID    integrations: {      aws: { sqs: [{ linkedAccountId: LINKED_CLOUD_ACCOUNT_ID }] }    }  ) {    disabledIntegrations {      id      accountId      name    }    errors {      type      message    }  }}