

# CircleCI への接続
<a name="connecting-to-data-circleci"></a>

CircleCI は、継続的インテグレーションおよび継続的デリバリープラットフォームです。CircleCI アカウントには、プロジェクト、パイプライン、ワークフローなどに関するデータが含まれています。CircleCI ユーザーの場合は、CircleCI アカウントに AWS Glue を接続できます。その後、CircleCI を ETL ジョブのデータソースとして使用できます。これらのジョブを実行して、CircleCI と AWS サービス、またはその他のサポートされているアプリケーション間でデータを転送します。

**Topics**
+ [CircleCI の AWS Glue サポート](circleci-support.md)
+ [接続を作成および使用するための API オペレーションを含むポリシー](circleci-configuring-iam-permissions.md)
+ [CircleCI の設定](circleci-configuring.md)
+ [CircleCI 接続の設定](circleci-configuring-connections.md)
+ [CircleCI エンティティからの読み取り](circleci-reading-from-entities.md)
+ [CircleCI 接続オプション](circleci-connection-options.md)
+ [CircleCI の制限事項](circleci-connection-limitations.md)

# CircleCI の AWS Glue サポート
<a name="circleci-support"></a>

AWS Glue は、次のように CircleCI をサポートしています。

**ソースとしてサポートされていますか?**  
はい。AWS Glue ETL ジョブを使用して、CircleCI からデータをクエリできます。

**ターゲットとしてサポートされていますか?**  
いいえ。

**サポートされている CircleCI API バージョン**  
次の CircleCI API バージョンがサポートされています。
+ v2

# 接続を作成および使用するための API オペレーションを含むポリシー
<a name="circleci-configuring-iam-permissions"></a>

次のサンプル ポリシーで、接続の作成と使用に必要な AWS IAM 権限について説明します。新しいロールを作成する場合は、以下を含むポリシーを作成します。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

上記の方法を使用しない場合は、代わりに次のマネージド IAM ポリシーを使用します:
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – さまざまな AWS Glue プロセスを実行するために必要なリソースへのアクセス権をユーザーに代わって付与します。これらのリソースには AWS Glue 、Amazon S3、IAM、CloudWatch Logs、および Amazon EC2 が含まれます。このポリシーで指定されたリソースの命名規則に従った場合、AWS Glue プロセスは必要なアクセス権限を使用できます。このポリシーは、通常、クローラ、ジョブ、開発エンドポイントを定義するときに指定されたロールにアタッチされます。
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) — ポリシーがアタッチされているアイデンティティが AWS マネージメントコンソールを使用するときは、AWS Glue リソースへのフルアクセスを許可します。このポリシーで指定されたリソースの命名規則に従った場合、ユーザーは完全なコンソール機能を使用できます。このポリシーは、通常 AWS Glue コンソールのユーザーにアタッチされています。

# CircleCI の設定
<a name="circleci-configuring"></a>

AWS Glue を使用して CircleCI からデータを転送できるようにするには、次の要件を満たす必要があります。

## 最小要件
<a name="circleci-configuring-min-requirements"></a>

以下に、最小要件を示します。
+ 転送するデータを含む CircleCI のアカウントを持っている。
+ アカウントのユーザー設定で、個人用 API トークンを作成した。詳細については、「[Creating a personal API token](https://circleci.com/docs/managing-api-tokens/#creating-a-personal-api-token)」を参照してください。
+ 接続の作成時に、個人用 API トークンを AWS Glue に提供します。

これらの要件を満たすと、CircleCI アカウントに AWS Glue を接続する準備が整います。

# CircleCI 接続の設定
<a name="circleci-configuring-connections"></a>

CircleCI はカスタム認可をサポートしています。

CircleCI 接続を設定するには:

1. AWS Secrets Manager で、次の詳細を含むシークレットを作成します。

   1. カスタマーマネージド接続アプリケーションの場合、シークレットには、`Circle-Token` を使用して接続されたアプリケーションの API キーをキーとして含める必要があります。

   1. 注: AWS Glue で接続にシークレットを作成する必要があります。

1. AWS Glue Glue Studio で、以下の手順に従って **[データ接続]** の下に接続を作成します。

   1. **[データソース]** を選択する際に、[CircleCI] を選択します。

   1. 次のアクションを実行でき、AWS Glue がその権限を持つ AWS IAM ロールを選択します。

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. AWS Glue でこの接続に使用する `secretName` を選択して、トークンを配置します。

   1. ネットワークを使用する場合は、ネットワークオプションを選択します。

1. AWS Glue ジョブに関連付けられている IAM ロールに `secretName` を読み取るアクセス許可を付与します。

# CircleCI エンティティからの読み取り
<a name="circleci-reading-from-entities"></a>

**前提条件**

読み取り元の CircleCI オブジェクト。オブジェクト名が必要になります。

**ソースに対応するエンティティ**:


| エンティティ | フィルタリング可能 | 制限をサポートする | Order By をサポートする | Select \$1 をサポートする | パーティション分割をサポートする | 
| --- | --- | --- | --- | --- | --- | 
| Context | あり | なし | なし | あり | なし | 
| 組織概要メトリクス | あり | なし | なし | あり | なし | 
| パイプライン | なし | なし | なし | あり | なし | 
| パイプラインワークフロー | あり | なし | なし | あり | なし | 
| プロジェクトブランチ | あり | なし | なし | あり | なし | 
| プロジェクトフレーキーテスト | なし | なし | なし | あり | なし | 
| プロジェクト概要メトリクス | あり | なし | なし | あり | なし | 
| スケジュール | なし | なし | なし | あり | なし | 
| ワークフロージョブの時系列 | あり | なし | なし | あり | なし | 
| ワークフローのメトリクスと傾向 | あり | なし | なし | あり | なし | 
| ワークフローの最近の実行 | あり | なし | なし | あり | なし | 
| ワークフロー概要メトリクス | あり | なし | なし | あり | なし | 
| ワークフローテストメトリクス | あり | なし | なし | あり | なし | 

**例**:

```
circleci_read = glueContext.create_dynamic_frame.from_options(
    connection_type="circleci",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "context/e7ea2945-dccb-4205-b673-8391fe1b3a4c",
        "API_VERSION": "v2"
    }
```

## CircleCI エンティティとフィールドの詳細
<a name="circleci-reading-from-entities-field-details"></a>

エンティティとフィールドの詳細については、以下を参照してください:
+ [コンテキスト](https://circleci.com/docs/api/v2/#operation/listContexts)
+ [プロジェクト概要メトリクス](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowsPageData)
+ [ワークフロージョブの時系列](https://circleci.com/docs/api/v2/#operation/getJobTimeseries)
+ [組織概要メトリクス](https://circleci.com/docs/api/v2/#operation/getOrgSummaryData)
+ [プロジェクトブランチ](https://circleci.com/docs/api/v2/#operation/getAllInsightsBranches)
+ [プロジェクトフレーキーテスト](https://circleci.com/docs/api/v2/#operation/getFlakyTests)
+ [ワークフローの最近の実行](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowRuns)
+ [ワークフロー概要メトリクス](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowMetrics)
+ [ワークフローのメトリクスと傾向](https://circleci.com/docs/api/v2/#operation/getWorkflowSummary)
+ [ワークフローテストメトリクス](https://circleci.com/docs/api/v2/#operation/getProjectWorkflowTestMetrics)
+ [Pipelines](https://circleci.com/docs/api/v2/#operation/listPipelinesForProject)
+ [パイプラインワークフロー](https://circleci.com/docs/api/v2/#operation/listWorkflowsByPipelineId)
+ [スケジュール](https://circleci.com/docs/api/v2/#operation/listSchedulesForProject)

静的メタデータを持つエンティティ:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/glue/latest/dg/circleci-reading-from-entities.html)

**注記**  
構造体データ型とリストデータ型は、コネクタの応答で文字列データ型に変換されます。

**パーティショニングクエリ**

CircleCI は、フィールドベースまたはレコードベースのパーティショニングをサポートしていません。

# CircleCI 接続オプション
<a name="circleci-connection-options"></a>

CircleCI の接続オプションは次のとおりです。
+ `ENTITY_NAME`(文字列) – (必須) 読み取りに使用されます。CircleCI のオブジェクトの名前。
+ `API_VERSION`(文字列) – (必須) 読み取りに使用されます。使用する CircleCI Rest API バージョン。
+ `SELECTED_FIELDS`(List<String>) – Default: empty(SELECT \$1). 読み込みに使用されます。オブジェクトに選択する列です。
+ `FILTER_PREDICATE`(文字列) – デフォルト: 空 読み込みに使用されます。Spark SQL 形式である必要があります。
+ `QUERY`(文字列) - デフォルト: 空 読み込みに使用されます。完全な Spark SQL クエリです。

# CircleCI の制限事項
<a name="circleci-connection-limitations"></a>

CircleCI の制限事項または注意事項は次のとおりです。
+ CircleCI は、フィールドベースまたはレコードベースのパーティション分割をサポートしていません。
+ '-' (ハイフン) を含むフィルターフィールドは、バッククオートでラップされている場合にのみ機能します。例: `workflow-name` = "abc"
+ GitLab VCS エンティティパスに必要な「プロジェクト ID」を取得するプログラム的な方法がないため、GitLab VCS タイプをサポートできません。