

# Git 同期と CloudFormation の連携
<a name="git-sync-concepts-terms"></a>

このトピックでは、Git 同期の仕組みについて説明し、それを使用するために必要な主要な概念を紹介します。

**Topics**
+ [Git 同期の仕組み](#git-sync-concepts-terms-how)
+ [プルリクエストに関するコメント](#git-sync-comments-on-pull-requests)
+ [スタックデプロイファイル](#git-sync-concepts-terms-depoyment-file)
+ [CloudFormation テンプレートファイル](#git-sync-concepts-terms-template-file)
+ [テンプレート定義リポジトリ](#git-sync-concepts-terms-template-definition-repository)

## Git 同期の仕組み
<a name="git-sync-concepts-terms-how"></a>

Git 同期を使用するには、まず [CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html) サービスを使用して Git プロバイダーを CloudFormation に接続する必要があります。このガイドの手順では、接続は CodeConnections コンソールを通じて作成されます。または、AWS CLI を使用して接続を作成することもできます。次のいずれかの Git プロバイダーを使用できます。
+ [GitHub](https://github.com/)
+ [GitHub エンタープライズ](https://github.com/enterprise/)
+ [GitLab](https://about.gitlab.com/)
+ [Bitbucket](https://bitbucket.org)
+ [GitLab セルフマネージド](https://docs.gitlab.com/subscriptions/self_managed/)

次に、スタックを定義する CloudFormation テンプレートを作成し、リポジトリに追加します。このテンプレートファイルは監視されます。CloudFormation は、変更がコミットされると自動的にスタックを更新します。

CloudFormation コンソールで新しいスタックを作成し、**[Git から同期]** を選択して、Git 同期を使用するように CloudFormation に指示します。CloudFormation に監視させるリポジトリとブランチを指定し、スタックを定義するリポジトリ内の CloudFormation テンプレートを指定します。

設定時に、リポジトリから独自のスタックデプロイファイルを指定するか、Git 同期に生成させることができます。スタックデプロイファイルには、スタック内のリソースを設定するパラメータと値が含まれています。このスタックデプロイファイルは監視されます。CloudFormation は、変更がコミットされると自動的にスタックを更新します。

Git 同期は、スタックを CloudFormation テンプレートファイルおよびスタックデプロイファイルと同期するためのプルリクエストをリポジトリに作成します。Git 同期でスタックデプロイファイルを生成した場合、そのファイルは Git 同期によってリポジトリに送信されます。

その後、プルリクエストをリポジトリにマージすることで、CloudFormation がスタックをプロビジョニングし、デプロイパラメータで設定し、リポジトリの変更のモニタリングを開始するようにします。

それ以降、テンプレートファイルまたはスタックデプロイファイルを変更してリポジトリにコミットするたびに、CloudFormation は自動的に変更を検出します。チームがプルリクエストを使用する場合、デプロイ前にチームメンバーは変更を確認して承認できます。プルリクエストが受け入れられると、CloudFormation は変更をデプロイします。

CloudFormation コンソールで、スタックの Git 同期設定のステータスをモニタリングし、スタックに適用されたコミットの履歴を確認できます。コンソールには、Git 同期の再設定や問題のトラブルシューティングを行うためのツールも用意されています。

## プルリクエストに関するコメント
<a name="git-sync-comments-on-pull-requests"></a>

コンソールで **[プルリクエストに対するコメントの有効化]** オプションをオンにすることにより、CloudFormation が CodeConnections サービスを通じてプルリクエストのコード変更の概要を作成するように選択できます。プルリクエストの変更の概要を提供することは、プルリクエストをマージする前に、提案された変更の影響をチームメンバーが簡単に確認して理解できることを意味します。詳細については、「[CloudFormation がプルリクエストでスタック変更の概要を追加できるようにする](gitsync-enable-comments-on-pull-requests.md)」を参照してください。

## スタックデプロイファイル
<a name="git-sync-concepts-terms-depoyment-file"></a>

スタックデプロイファイルは、JavaScript Object Notation (JSON) または YAML の標準フォーマットファイルであり、CloudFormation スタックを管理するパラメータと値を含みます。このファイルの変更は監視されます。ファイルへの変更がリポジトリにコミットされると、関連するスタックが自動的に更新されます。

スタックデプロイファイルには、キーと値のペアと 2 つのディクショナリが含まれます。
+ `template-file-path`

  これは CloudFormation テンプレートファイルの完全なリポジトリパスです。テンプレートファイルは、このデプロイファイルに関連付けられた CloudFormation スタックのリソースを宣言します。
+ `parameters`

  パラメータディクショナリには、スタック内のリソースを構成するキーと値のペアが含まれます。スタックデプロイファイルには、最大 50 個のパラメータを含めることができます。
+ `tags`

  タグディクショナリには、スタックにあるリソースの特定、および分類に使用できる任意のキーと値のペアが含まれます。スタックデプロイファイルには、最大 50 個のタグを含めることができます。

独自のスタックデプロイファイルを指定することも、Git 同期で作成し、プルリクエストを自動的にリポジトリに送信することもできます。スタックのデプロイファイルを編集し、変更をリポジトリにコミットすることで、パラメータとタグを管理できます。

Git 同期スタックデプロイファイルの例を次に示します。

```
template-file-path: fargate-srvc/my-stack-template.yaml

parameters: 
    image: public.ecr.aws/lts/nginx:latest
    task_size: x-small
    max_capacity: 5
    port: 8080
    env: production
tags:
    cost-center: '123456'
    org: 'AWS'
```

## CloudFormation テンプレートファイル
<a name="git-sync-concepts-terms-template-file"></a>

テンプレートファイルには、CloudFormation スタックを構成する AWS リソースの宣言が含まれています。Git 同期では、テンプレートファイルは Git リポジトリに保存され、スタックデプロイファイルによって参照されます。テンプレートを編集し、変更をリポジトリにコミットすると、スタックを管理できます。

詳細については、「[CloudFormation テンプレートの使用](template-guide.md)」を参照してください。

## テンプレート定義リポジトリ
<a name="git-sync-concepts-terms-template-definition-repository"></a>

テンプレート定義リポジトリは、Git 同期を通じて CloudFormation にリンクされている Git リポジトリです。リポジトリは、CloudFormation テンプレートとスタックデプロイファイルへの変更について監視されます。ファイルへの変更がコミットされると、関連するスタックが自動的に更新されます。

**重要**  
Git 同期コンソールでテンプレート定義リポジトリを設定する際、Git 接続から正しいリポジトリとブランチを選択します。Git 同期は、設定したリポジトリとブランチのみを監視して、CloudFormation テンプレートとスタックデプロイファイルへの変更を確認します。