

# Git 同期で Git リポジトリに保存されているソースコードとスタックを同期する
<a name="git-sync"></a>

Git 同期を使用すると、ソースコントロールを使用して CloudFormation スタックを管理できます。これを行うには、Git リポジトリをモニターリングするように CloudFormation を設定します。リポジトリの次の 2 つのファイルへの変更に関して監視が行われます。
+ スタックを定義する CloudFormation テンプレートファイル
+ スタックを設定するパラメータを含むスタックデプロイファイル

Git 同期を使用すると、プルリクエストとバージョントラッキングを使用し、一元化された場所から CloudFormation スタックの設定、デプロイ、更新を行うことができます。テンプレートまたはデプロイファイルへの変更をコミットすると、CloudFormation はスタックを自動的に更新します。プルリクエストを使用する場合、CloudFormation は実際にスタックを更新する前に加えられる変更を説明するコメントをプルリクエストに残すことができます。ただし、最初にこの機能を有効にする必要があります。

Git 同期には、リポジトリへのリンク、スタックデプロイファイルの生成、CloudFormation テンプレートの更新、リポジトリへのプルリクエストの送信に使用できるコンソールインターフェイスが用意されています。Git 同期には、アクティブな Git 同期スタックのデプロイを監視、編集、トラブルシューティングできるステータスダッシュボードもあります。[スタックを作成](cfn-console-create-stack.md)するときに、Git 同期には [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)からアクセスします。Git 同期には CodeConnections を使用してアクセスすることもできます。詳細については、「Developer Tools Console ユーザーガイド」の「[リンクされたリポジトリの同期設定を操作する](https://docs.aws.amazon.com/dtconsole/latest/userguide/configurations.html)」を参照してください。

Git 同期は [GitHub](https://github.com/)、[GitHub Enterprise](https://github.com/enterprise)、[GitLab](https://about.gitlab.com/)、[Bitbucket](https://bitbucket.org)、[GitLab セルフマネージド](https://docs.gitlab.com/subscriptions/self_managed/)のリポジトリをサポートしています。

**注記**  
Git 同期を利用できるリージョンは、米国東部（バージニア北部）、米国東部（オハイオ）、米国西部（北カリフォルニア）、米国西部（オレゴン）、カナダ（中部）、アジアパシフィック（ムンバイ）、アジアパシフィック (東京)、アジアパシフィック (ソウル)、アジアパシフィック (シンガポール)、アジアパシフィック (シドニー)、欧州 (アイルランド)、欧州 (ロンドン)、欧州 (パリ)、欧州 (ストックホルム)、欧州 (フランクフルト)、欧州 (ミラノ)、南米 (サンパウロ) です。

マルチアカウント戦略での Git 同期の使用については、ブログ記事「[Use CloudFormation Git sync to configure resources in customer accounts](https://aws.amazon.com/blogs/devops/use-aws-cloudformation-git-sync-to-configure-resources-in-customer-accounts/)」を参照してください。

**Topics**
+ [Git 同期の仕組み](git-sync-concepts-terms.md)
+ [前提条件](git-sync-prereq.md)
+ [リポジトリソースコードからスタックを作成する](git-sync-create-stack-from-repository-source-code.md)
+ [プルリクエストに関するコメントを有効にする](gitsync-enable-comments-on-pull-requests.md)
+ [ステータスダッシュボード](git-sync-status.md)

# 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 テンプレートとスタックデプロイファイルへの変更を確認します。

# Git 同期を使用してスタックを Git リポジトリに同期するための前提条件
<a name="git-sync-prereq"></a>

CloudFormation スタックを Git リポジトリに同期する前に、次の要件が満たされていることを確認します:

**Topics**
+ [Git リポジトリ](#git-sync-prereq-repo)
+ [CloudFormation テンプレート](#git-sync-prereq-template)
+ [Git 同期サービスロール](#git-sync-prereq-iam)
+ [コンソールユーザーの IAM アクセス権限](#git-sync-prereq-user-permissions)

## Git リポジトリ
<a name="git-sync-prereq-repo"></a>

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/)

リポジトリは、パブリックでもプライベートでもかまいません。[接続コンソール](https://console.aws.amazon.com/codesuite/settings/connections)を使用して、Git リポジトリを CloudFormation に接続する必要があります。

## CloudFormation テンプレート
<a name="git-sync-prereq-template"></a>

Git リポジトリには、Git 同期で接続する対象のブランチにチェックインされた [CloudFormation テンプレートファイル](git-sync-concepts-terms.md#git-sync-concepts-terms-template-file)が含まれている必要があります。このテンプレートは[スタックデプロイファイル](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)によって参照されます。

## Git 同期サービスロール
<a name="git-sync-prereq-iam"></a>

Git 同期には IAM ロールが必要です。Git 同期の設定時にスタック用の IAM ロールを作成するか、既存のロールを使用するかを選択できます。

**注記**  
自動的に生成された IAM ロールは、そのロールが生成されたスタックにのみ権限を適用します。自動生成された IAM ロールを再利用するには、新しいスタックのロールを編集する必要があります。

### Git 同期サービスロールに必要な権限
<a name="git-sync-prereq-permissions"></a>

Git 同期に指定する IAM ロールには、以下の権限が必要です。
+ `cloudformation:CreateChangeSet`
+ `cloudformation:DeleteChangeSet`
+ `cloudformation:DescribeChangeSet`
+ `cloudformation:DescribeStackEvents`
+ `cloudformation:DescribeStacks`
+ `cloudformation:ExecuteChangeSet`
+ `cloudformation:ListChangeSets`
+ `cloudformation:ValidateTemplate`
+ `events:PutRule`
+ `events:PutTargets`

**注記**  
上記の必要な権限は、Git 同期が生成する IAM ロールに自動的に追加されます。

次の IAM ロールの例には、Git 同期の前提条件となる権限が含まれています。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SyncToCloudFormation",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:DeleteChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:ListChangeSets",
                "cloudformation:ListStacks",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        },
        {
            "Sid": "PolicyForManagedRules",
            "Effect": "Allow",
            "Action": [
                "events:PutRule",
                "events:PutTargets"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                "events:ManagedBy": ["cloudformation.sync.codeconnections.amazonaws.com"]
                }
            }
        },
        {
            "Sid": "PolicyForDescribingRule",
            "Effect": "Allow",
            "Action": "events:DescribeRule",
            "Resource": "*"
        }
    ]
}
```

------

#### 信頼ポリシー
<a name="git-sync-prereq-trust-policy"></a>

信頼関係を定義するロールを作成する際、次の信頼ポリシーを指定する必要があります。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CfnGitSyncTrustPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.sync.codeconnections.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

Confused Deputy Problem (混乱した使節の問題) から自分を守るために、`aws:SourceArn` および `aws:SourceAccount` の条件キーを使用することをお勧めします。ソースアカウントはアカウント ID で、ソース ARN は、CloudFormation が Git リポジトリに接続できるようにする [CodeConnections](https://docs.aws.amazon.com/codeconnections/latest/APIReference/Welcome.html) サービス内の接続の ARN です。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CfnGitSyncTrustPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.sync.codeconnections.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:codeconnections:us-east-1:123456789012:connection/EXAMPLE64-8aad-4d5d-8878-dfcab0bc441f"
        }
      }
    }
  ]
}
```

------

混乱した代理に関する問題の詳細については、「[サービス間の混乱した代理の防止](cross-service-confused-deputy-prevention.md)」を参照してください。

## コンソールユーザーの IAM アクセス権限
<a name="git-sync-prereq-user-permissions"></a>

CloudFormation コンソールを使用して Git 同期を正常にセットアップするには、エンドユーザーにも IAM を通じてアクセス許可を付与する必要があります。

Git リポジトリへの接続を作成および管理するには、次の `codeconnections` アクセス許可が必要です。
+ `codeconnections:CreateRepositoryLink`
+ `codeconnections:CreateSyncConfiguration`
+ `codeconnections:DeleteRepositoryLink`
+ `codeconnections:DeleteSyncConfiguration`
+ `codeconnections:GetRepositoryLink`
+ `codeconnections:GetSyncConfiguration`
+ `codeconnections:ListRepositoryLinks`
+ `codeconnections:ListSyncConfigurations`
+ `codeconnections:ListTagsForResource`
+ `codeconnections:TagResource`
+ `codeconnections:UntagResource`
+ `codeconnections:UpdateRepositoryLink`
+ `codeconnections:UpdateSyncBlocker`
+ `codeconnections:UpdateSyncConfiguration`
+ `codeconnections:UseConnection`

コンソールユーザーには、Git 同期セットアッププロセス中にスタックを表示および管理するための次の `cloudformation` アクセス許可も必要です。
+ `cloudformation:CreateChangeSet`
+ `cloudformation:DeleteChangeSet`
+ `cloudformation:DescribeChangeSet`
+ `cloudformation:DescribeStackEvents`
+ `cloudformation:DescribeStacks`
+ `cloudformation:ExecuteChangeSet`
+ `cloudformation:GetTemplate`
+ `cloudformation:ListChangeSets`
+ `cloudformation:ListStacks`
+ `cloudformation:ValidateTemplate`

**注記**  
コンソールのみの使用では、変更セットのアクセス許可 (`cloudformation:CreateChangeSet`、`cloudformation:DeleteChangeSet`、`cloudformation:DescribeChangeSet`、`cloudformation:ExecuteChangeSet`) は厳密に必要ではない場合がありますが、フルスタック検査および管理機能を有効にするために推奨されます。

次の IAM ポリシーの例には、コンソールを使用して Git 同期を設定するために必要なユーザーアクセス許可が含まれています。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CodeConnectionsPermissions",
            "Effect": "Allow",
            "Action": [
                "codeconnections:CreateRepositoryLink",
                "codeconnections:CreateSyncConfiguration",
                "codeconnections:DeleteRepositoryLink",
                "codeconnections:DeleteSyncConfiguration",
                "codeconnections:GetRepositoryLink",
                "codeconnections:GetSyncConfiguration",
                "codeconnections:ListRepositoryLinks",
                "codeconnections:ListSyncConfigurations",
                "codeconnections:ListTagsForResource",
                "codeconnections:TagResource",
                "codeconnections:UntagResource",
                "codeconnections:UpdateRepositoryLink",
                "codeconnections:UpdateSyncBlocker",
                "codeconnections:UpdateSyncConfiguration",
                "codeconnections:UseConnection",
                "codeconnections:CreateForcedTargetSync",
                "codeconnections:CreatePullRequestForResource"
            ],
            "Resource": "*"
        },
        {
            "Sid": "CloudFormationConsolePermissions",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet",
                "cloudformation:DeleteChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:DescribeStackEvents",
                "cloudformation:DescribeStacks",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplate",
                "cloudformation:ListChangeSets",
                "cloudformation:ListStacks",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        }
    ]
}
```

------

**注記**  
アクセス許可 `codeconnections:CreateForcedTargetSync` と `codeconnections:CreatePullRequestForResource` を含む IAM ポリシーを作成すると、これらのアクションが存在しないことを示す警告が IAM コンソールに表示されることがあります。この警告を無視しても、ポリシーは正常に作成されます。これらのアクセス許可は、IAM コンソールでは認識されないものの、特定の Git 同期オペレーションには必要です。

# Git 同期を使用してリポジトリソースコードからスタックを作成する
<a name="git-sync-create-stack-from-repository-source-code"></a>

このトピックでは、Git 同期を使用して Git リポジトリに同期する CloudFormation スタックを作成する方法について説明します。

**重要**  
先に進む前に、前のセクションのすべての[前提条件](git-sync-prereq.md)を満たしてください。

## リポジトリソースコードからスタックを作成する
<a name="create-stack-from-repository-source-code"></a>

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、スタックを作成する AWS リージョンを選択します。

1. **[スタック]** ページで、**[スタックの作成]**、**[新しいリソースを使用 (標準)]** の順に選択します。

1. **[Create stack]** (スタックの作成) ページで、次の手順を実行します。

   1. **[前提条件 - テンプレートを準備]** で、**[既存のテンプレートを選択]** を選択したままにします。

   1. **[テンプレートを指定]** で、**[Git から同期]** を選択し、**[次へ]** を選択します。

1. **[スタックの詳細を指定]** ページの **[スタック名]** で、スタックの名前を入力します。スタック名には、文字 (A～Z および a～z)、数字 (0～9)、およびダッシュ (-) を使用できます。

1. **[スタックデプロイファイル]** の **[デプロイファイルの作成]** で、次のように操作します。
   + スタックデプロイファイルを作成してリポジトリに追加していない場合は、**[次のパラメータを使用してファイルを作成し、リポジトリに配置する]** を選択します。**
   + リポジトリにスタックデプロイファイルがある場合は、**[リポジトリに独自のファイルを提供しています]** を選択します。

1. **[テンプレート定義リポジトリ]** で、既に CloudFormation にリンクされている Git リポジトリを選択する場合は、**[リンクされた Git リポジトリを選択する]** を、新しいリポジトリをリンクする場合は、**[Git リポジトリをリンクする]** を選択します。**[Git リポジトリをリンクする]** を選択した場合は、次の操作を行います。

   1. **[レポジトリプロバイダーを選択]** で、次のいずれかを選択します。
      + **GitHub**
      + **GitHub Enterprise Server**
      + **GitLab**
      + **Bitbucket**
      + **GitLab セルフマネージド**

   1. **[接続]** でリストから接続を選択します。**[接続]** リストにオプションが表示されない場合は、**[新しい接続を追加]** を選択して、[接続コンソール](https://console.aws.amazon.com/codesuite/settings/connections)に移動し、リポジトリへの接続を作成します。

1. **[リポジトリ]** では、スタックテンプレートファイルが含まれている Git リポジトリを選択します。

1. **[ブランチ]** リストで、Git 同期に監視させるブランチを選択します。
**注記**  
Git 同期は、CloudFormation テンプレートとスタックデプロイファイルへの変更について、選択したブランチのみを監視します。スタックに適用する変更はすべてこのブランチにコミットする必要があります。

1. **デプロイファイルパス**には、リポジトリブランチのルートにあるスタックデプロイファイル名を含むフルパスを指定します。

   CloudFormation がファイルを生成している場合、ここでファイルがリポジトリにコミットされます。ご自身でファイルを設置する場合、これがリポジトリ内のファイルの場所です。

1. **IAM ロール**を追加します。IAM ロールには、CloudFormation が Git リポジトリからスタックを同期するために必要な権限が含まれています。新しいロールを生成するには **[新しい IAM ロール]** を選択し、AWS アカウント から既存のロールを選択するには **[既存の IAM ロール]** を選択できます。新しいロールの生成を選択すると、必要な権限がロールに含まれます。

1. プルリクエストに対するコメントを有効または無効にします。
   + CloudFormation がスタック更新のプルリクエストで変更セット情報を追加するようにするには、**[プルリクエストに対するコメントを有効にする]** トグルをオンにしたままにします。
   + このトグルをオフにすると、CloudFormation は、リポジトリファイルの更新時に現在のスタック設定とプルリクエストで提案された変更の違いを記述しません。

1. **テンプレートファイルパス**には、リポジトリのルートからのスタックテンプレートファイルのフルパスを指定します。

1. (オプション) スタックパラメータを指定するには、**[パラメータを追加]** を選択し、各パラメータにキーと値を指定してから、**[次へ]** を選択します。詳細については、「[スタックデプロイファイル](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)」を参照してください。

   例えば、スタックデプロイファイルで **port=8080** パラメータを指定するには、次を実行します。

   1. **[Add parameter]** (パラメータの追加) を選択します。

   1. [**キー**] に「**port**」と入力します。

   1. [**Value (値)**] に「**8080**」と入力します。

1. (オプション) スタックタグを指定するには、**[新しいタグを追加]** を選択し、各タグのタグキーと値を指定して、**[次へ]** を選択します。詳細については、「[スタックデプロイファイル](git-sync-concepts-terms.md#git-sync-concepts-terms-depoyment-file)」を参照してください。

1. **[次へ]** を選択して **[スタックオプションの設定]** に進みます。スタックオプションの設定については、「[スタックオプションを設定する](cfn-console-create-stack.md#configure-stack-options)」を参照してください。

   スタックの設定が完了したら、**[次へ]** を選択してレビューとデプロイを続行します。

1. スタック設定を確認し、以下を確認します。
   + スタックテンプレートは正しく設定され、**[Git から同期]** に設定されています。
   + デプロイファイルは正しく設定されています。
   + テンプレート定義リポジトリは正しく設定されており、具体的には、正しい**リポジトリ**と**ブランチ名**が選択されています。
   + デプロイファイルのプレビューは正しく、期待通りのパラメータと値が含まれています。

1. **[送信]** を選択してスタックを作成します。

   **[送信]** を選択すると、Git リポジトリにプルリクエストが自動的に作成されます。スタックを作成するには、このプルリクエストを Git リポジトリにマージする必要があります。スタックが作成されると、CloudFormation は Git リポジトリの変更をモニタリングします。

## Git リポジトリからスタックを更新する
<a name="update-stack-from-repository-source-code"></a>

スタックを更新するには、Git リポジトリのテンプレートファイルまたはスタックデプロイファイルに直接変更を加えます。モニタリング対象のブランチに変更をコミットすると、CloudFormation は自動的にスタックを更新します。プルリクエストを使用する場合、スタックが更新される前に Git リポジトリにプルリクエストが自動的に作成されます。スタックを更新するには、このプルリクエストを Git リポジトリにマージする必要があります。

CloudFormation コンソールで、スタックを選択し、**[Git 同期]** タブを選択すると、スタックと同期イベントのステータスに関する情報が表示されます。詳細については、「[Git 同期ステータスダッシュボード](git-sync-status.md)」を参照してください。

# CloudFormation がプルリクエストでスタック変更の概要を追加できるようにする
<a name="gitsync-enable-comments-on-pull-requests"></a>

このトピックでは、CloudFormation が Git リポジトリのプルリクエストでスタックの変更の概要を追加できるようにする方法について説明します。

プルリクエストに対するコメント機能を有効にすると、CloudFormation は、現在のスタック設定と、リポジトリファイルの更新時に提案された変更の違いを説明するコメントを追加できるようになります。このコメントは、追加、変更、または削除されるリソースの概要を提供します。これを利用することで、プルリクエストをマージする前に徹底したコードレビューを実行できます。

**新しいスタックのプルリクエストに対するコメントを有効にするには (コンソール)**  
スタックを作成する際に、**[スタックの詳細を指定]** ページの **[テンプレート定義リポジトリ]** で、**[プルリクエストに対するコメントを有効にする]** トグルがオンになっているようにします。これは、新しいスタックのデフォルトの設定です。

**既存のスタックのプルリクエストに対するコメントを有効にするには (コンソール)**

1. AWS マネジメントコンソール にサインインし、CloudFormation コンソール ([https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)) を開きます。

1. 画面の上部のナビゲーションバーで、スタックを作成した AWS リージョン を選択します。

1. **[スタック]** ページで、更新する実行中のスタックを選択します。

1. **[Git 同期]** タブを選択してから、**[編集]** をクリックします。

1. **[Git 同期設定を編集]** ページの **[テンプレート定義リポジトリ]** で、**[プルリクエストに対するコメントを有効にする]** トグルをオンに切り替えます。

1. [**Update configuration (設定の更新)**] を選択します。

# Git 同期ステータスダッシュボード
<a name="git-sync-status"></a>

AWS CloudFormation Git 同期デプロイのステータスを表示するには、CloudFormation コンソールでスタックを選択してから、**[Git 同期]** タブを選択します。

Git 同期タブは、**[Git 同期ステータス]** と **[最新の同期イベント]** の 2 つのパネルに分かれています。

## Git 同期のステータス
<a name="git-sync-status-info"></a>

上部パネルには、スタックの Git 同期設定に関する以下の情報が表示されます。

****リポジトリ****  
 Git 同期に接続されているリポジトリへのリンク

****リポジトリプロバイダー****  
リポジトリプロバイダーの名前

****ブランチ****  
Git 同期が監視しているブランチの名前

****デプロイファイルパス****  
このスタックのスタックデプロイファイルへのフルパス

****リポジトリの同期ステータス****  
直近の同期オペレーションのステータス

****リポジトリ同期ステータスメッセージ****  
直近の同期オペレーションのメッセージ

****Git 同期のステータス****  
このスタックの Git 同期のステータス

****プロビジョニングのステータス****  
プロビジョニング操作のステータス

パネルの右上にある次のボタンを使用して Git 同期を変更または更新します。
+ **編集**-Git 同期設定を編集します。
+ **最新のコミットを再試行**-リポジトリへの最新のコミットに従ってスタックを更新します。
+ **切断**-Git 同期をスタックから切断します。
+ **更新**-Git 同期ステータスパネルを更新します。

## 最新の同期イベント
<a name="git-sync-status-sync-events"></a>

**[最新の同期イベント]** パネルには、スタックに適用されたコミットの表が表示されます。

各列のヘッダーにある矢印を使用してテーブルをソートできます。テーブルは、以下によって、昇順または降順にソートできます。
+ **日付**
+ **コミット ID**
+ **イベント**
+ **日付**
+ **イベントタイプ**

## サポートされるスタック状態
<a name="git-sync-status-stack-state"></a>

Git 同期をスタックに設定できるのは、スタックが以下のサポートされている状態のいずれかにある場合のみです。
+ `CREATE_COMPLETE`
+ `UPDATE_COMPLETE`
+ `UPDATE_ROLLBACK_COMPLETE`
+ `IMPORT_COMPLETE`
+ `IMPORT_ROLLBACK_COMPLETE`

次の表で、スタックステータスコードの完全なリストと説明を示します。


| スタックステータスと、オプションの詳細ステータス | 説明 | 
| --- | --- | 
|  `CREATE_COMPLETE`  |  1 つ以上のスタックを正常に作成。  | 
|  `CREATE_IN_PROGRESS`  |  1 つ以上のスタックを作成中。  | 
|  `CREATE_FAILED`  |  1 つ以上のスタックの作成に失敗。関連するエラーメッセージを確認するには、スタックのイベントを調べます。作成の失敗の理由としては、スタックのすべてのリソースを操作するためのアクセス許可の不足、AWS サービスによるパラメーター値の拒否、リソース作成中のタイムアウトなどが考えられます。  | 
|  `DELETE_COMPLETE`  |  1 つ以上のスタックを正常に削除。削除されたスタックは、90 日間は保持され、表示できます。  | 
|  `DELETE_FAILED`  |  1 つ以上のスタックの削除に失敗。削除が失敗したので、まだ実行されているリソースがいくつかある可能性があります。ただし、スタックを操作したり、更新したりすることはできません。スタックを再度削除するか、スタックのイベントを調べて関連するエラーメッセージを確認します。  | 
|  `DELETE_IN_PROGRESS`  |  1 つ以上のスタックを削除中。  | 
| `REVIEW_IN_PROGRESS` | 進行中の、予測される StackId を持つがテンプレートまたはリソースのない 1 つ以上のスタックの作成。 このステータスコードのスタックは、[スタックの可能な限りの最大数](cloudformation-limits.md)に対してカウントされます。  | 
|  `ROLLBACK_COMPLETE`  |  スタックの作成の失敗後、またはスタックの作成の明示的なキャンセル後に、1 つ以上のスタックを正常に削除。スタックは以前の動作状態に戻ります。スタック作成オペレーションの実行中に作成されたすべてのリソースが削除されます。 このステータスが存在するのは、スタックの作成が失敗した後のみです。部分的に作成されたスタックからすべてのオペレーションが適切にクリーンアップされたことを示します。この状態では、削除オペレーションのみを実行できます。  | 
|  `ROLLBACK_FAILED`  |  スタックの作成の失敗後、またはスタックの作成の明示的なキャンセル後に、1 つ以上のスタックの削除に失敗。スタックを削除するか、スタックのイベントを調べて関連するエラーメッセージを確認します。  | 
|  `ROLLBACK_IN_PROGRESS`  |  スタックの作成の失敗後、またはスタックの作成の明示的なキャンセル後に、1 つ以上のスタックを削除中。  | 
|  `UPDATE_COMPLETE`  | 1 つ以上のスタックを正常に更新。 | 
|  `UPDATE_COMPLETE_CLEANUP_IN_PROGRESS`  |  スタックの正常な更新後に、1 つ以上のスタックの古いリソースを削除中。リソースの置き換えが必要なスタック更新の場合、CloudFormation はまず新しいリソースを作成し、次に古いリソースを削除して、スタックの中断を減らすことに役立ちます。この状態では、スタックは更新済みで使用可能ですが、CloudFormation はまだ古いリソースを削除中です。  | 
|  `UPDATE_FAILED`  | 1 つ以上のスタックの失敗した更新。関連するエラーメッセージを確認するには、スタックのイベントを調べます。 | 
|  `UPDATE_IN_PROGRESS`  |  1 つ以上のスタックを更新中。  | 
|  `UPDATE_ROLLBACK_COMPLETE`  |  スタックの更新の失敗後、1 つ以上のスタックを前の動作状態に正常に戻しました。  | 
|  `UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS`  |  スタックの更新の失敗後、1 つ以上のスタックの新しいリソースを削除中。この状態では、スタックが前の動作状態にロールバックされて使用可能ですが、CloudFormation がスタックの更新中に作成した新しいリソースをまだ削除中です。  | 
|  `UPDATE_ROLLBACK_FAILED`  |  スタックの更新の失敗後、1 つ以上のスタックを前の動作ステートに戻すことに失敗。この状態の場合は、スタックを削除するか、[ロールバックを続行する](using-cfn-updating-stacks-continueupdaterollback.md)ことができます。スタックが動作状態に戻るには、エラーを修正する必要がある場合があります。または、サポート に連絡してスタックを使用可能な状態に復元することができます。  | 
|  `UPDATE_ROLLBACK_IN_PROGRESS`  |  スタックの更新の失敗後、1 つ以上のスタックを前の動作状態に戻しています。  | 
|  `IMPORT_IN_PROGRESS`  |  インポートオペレーションは現在進行中です。  | 
|  `IMPORT_COMPLETE`  |  `resource import` をサポートするスタック内のすべてのリソースについて、インポート操作が正常に完了しました。  | 
|  `IMPORT_ROLLBACK_IN_PROGRESS`  |  インポートは、以前のテンプレート構成にロールバックされます。  | 
|  `IMPORT_ROLLBACK_FAILED`  |  スタック内の少なくとも 1 つのリソースに対するインポートのロールバックオペレーションが失敗しました。正常にインポートされたリソース CloudFormation の結果が利用可能になります。  | 
|  `IMPORT_ROLLBACK_COMPLETE`  |  インポートは、以前のテンプレート構成に正常にロールバックされました。  | 