チュートリアル: デプロイアクションの変数を使用するパイプラインを作成するAWS CloudFormation - AWS CodePipeline

チュートリアル: デプロイアクションの変数を使用するパイプラインを作成するAWS CloudFormation

このチュートリアルでは、AWS CodePipeline コンソールでデプロイアクションを使用してパイプラインを作成します。パイプラインが実行されると、テンプレートはスタックを作成し、さらに outputs ファイルを作成します。スタックテンプレートによって生成される出力は、CodePipeline の AWS CloudFormation アクションによって生成される変数です。

テンプレートからスタックを作成するアクションに、変数の名前空間を指定します。outputs ファイルによって生成された変数は、以降のアクションで使用できます。次の例では、AWS CloudFormation アクションによって生成された StackName 変数に基づいて変更セットを作成します。手動承認の後で、変更セットを実行し、StackName 変数に基づいてスタックを削除するスタック削除アクションを作成します。

前提条件: サービスロールと AWS CloudFormation リポジトリを作成するCodeCommit

以下のものを用意しておく必要があります。

  • CodeCommit リポジトリ。「チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)」で作成した AWS CodeCommit リポジトリを使用できます。

  • 次の例では、テンプレートから Amazon DocumentDB スタックを作成します。Amazon DocumentDB で次のアクセス許可を持つ AWS CloudFormation サービスロールを作成するには、AWS Identity and Access Management (IAM) を使用する必要があります。

    "rds:DescribeDBClusters", "rds:CreateDBCluster", "rds:DeleteDBCluster", "rds:CreateDBInstance"

ステップ 1: サンプル AWS CloudFormation テンプレートのダウンロード、編集、アップロード

AWS CloudFormation のサンプルテンプレートファイルをダウンロードし、これを CodeCommit リポジトリにアップロードします。

  1. リージョンのサンプルテンプレートページに移動します。例えば、us-west-2 のページは https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-services-us-west-2.html にあります。[Amazon DocumentDB] で、Amazon DocumentDB クラスターのテンプレートをダウンロードします。ファイル名は documentdb_full_stack.yaml です。

  2. documentdb_full_stack.yaml ファイルを解凍し、テキストエディタで開きます。以下の変更を加えます。

    1. 次の例では、テンプレートの Parameters セクションに次の Purpose: パラメータを追加します。

      Purpose: Type: String Default: testing AllowedValues: - testing - production Description: The purpose of this instance.
    2. 次の例では、テンプレートの Outputs: セクションに次の StackName 出力を追加します。

      StackName: Value: !Ref AWS::StackName
  3. テンプレートファイルを AWS CodeCommit リポジトリにアップロードします。解凍および編集したテンプレートファイルを、リポジトリのルートディレクトリにアップロードする必要があります。

    ファイルをアップロードするには、 コンソールを使用します。CodeCommit

    1. CodeCommit コンソールを開き、[リポジトリ] リストから自分のリポジトリを選択します。

    2. [Add file]、[Upload file] の順に選択します。

    3. [ファイルの選択] を選択し、ファイルを参照します。ユーザー名とメールアドレスを入力して、変更をコミットします。[変更のコミット] を選択します。

    ファイルは、リポジトリのルートレベルに次のように表示されます。

    documentdb_full_stack.yml

ステップ 2: パイプラインを作成する

このセクションでは、次のアクションを使用してパイプラインを作成します。

  • ソースステージでの CodeCommit アクション (ソースアーティファクトがテンプレートファイル)。

  • デプロイステージでの AWS CloudFormation デプロイアクション。

ウィザードによって作成されたソースステージとデプロイステージの各アクションには、変数の名前空間として SourceVariablesDeployVariables がそれぞれ割り当てられます。アクションには名前空間が割り当てられるため、この例で設定した変数はダウンストリームアクションで使用可能になります。詳細については、「Variables」を参照してください。

ウィザードを使用してパイプラインを作成するには

  1. AWS マネジメントコンソール にサインインし、CodePipeline コンソール (http://console.aws.amazon.com/codesuite/codepipeline/home) を開きます。

  2. [ようこそ] ページ、[Getting started (開始方法)] ページ、または [パイプライン] ページで、[パイプラインの作成] を選択します。

  3. [Step 1:] (ステップ 1) [Choose pipeline settings (パイプライン設定の選択)] の [パイプライン名] に「MyCFNDeployPipeline」と入力します。

  4. [Service role (サービスロール)] で、次のいずれかの操作を行います。

    • [New service role (新しいサービスロール)] を選択して、CodePipeline に IAM でのサービスロールの作成を許可します。[ロール名] では、ロールとポリシーの名前はいずれもデフォルトで次の形式になります。AWSCodePipelineServiceRole-region-pipeline_name

      例えば、このチュートリアルで作成したサービスロールは AWSCodePipelineServiceRole-us-west-2-MyS3DeployPipeline となります。

    • [Existing service role (既存のサービスロール)] を選択します。[ロール名] で、リストからサービスロールを選択します。

  5. アーティファクトストア:

    1. [デフォルトのロケーション] を選択し、パイプライン用に選択したリージョン内のパイプラインのデフォルトのアーティファクトストア (デフォルトとして指定した Amazon S3 アーティファクトバケットなど) を使用します。

    2. アーティファクトバケットなどのアーティファクトストアがパイプラインと同じリージョンに既に存在する場合は、[Custom location (カスタムの場所)] を選択します。Amazon S3

    注記

    これはソースコードのソースバケットではありません。これはパイプラインのアーティファクトストアです。パイプラインごとに個別のアーティファクトストア(S3 バケットなど)が必要です。パイプラインを作成または編集する場合は、パイプラインリージョンにアーティファクトバケットが必要であり、アクションを実行している AWS リージョンごとに 1 つのアーティファクトバケットが必要です。

    詳細については、「入力および出力アーティファクト」および「CodePipeline パイプライン構造リファレンス」を参照してください。

    [次へ] を選択します。

  6. [Step 2:] ソースステージの追加:

    1. [ソースプロバイダ] で、AWS CodeCommit を選択します。

    2. [リポジトリ名] で、「ステップ 1: CodeCommit レポジトリを作成する」で作成した CodeCommit リポジトリの名前を選択します。

    3. [Branch name] で、最新のコード更新を含むブランチの名前を選択します。

    リポジトリ名とブランチを選択した後、このパイプライン用に作成される Amazon CloudWatch Events ルールが表示されます。

    [次へ] を選択します。

  7. ステップ 3: で [ Add build stage (ビルドステージの追加)] で、[Skip build stage (ビルドステージのスキップ)] を選択し、もう一度 [スキップ] を選択して警告メッセージを受け入れます。

    [次へ] を選択します。

  8. [ステップ 4:] デプロイステージの追加:

    1. [アクション名] で、[デプロイ] をクリックします。[デプロイプロバイダ] で、[CloudFormation] を選択します。

    2. [アクションモード] で、[スタックを作成または更新する] をクリックします。

    3. [スタック名] に、スタックの名前を入力します。これは、テンプレートが作成するスタックの名前です。

    4. [出力ファイル名] に、出力ファイルの名前 (outputs など) を入力します。 これは、スタックの作成後にアクションによって作成されるファイルの名前です。

    5. [Advanced] を展開します。[パラメータの上書き] で、テンプレートの上書きをキーと値のペアとして入力します。例えば、このテンプレートには、次の上書きが必要です。

      { "DBClusterName": "MyDBCluster", "DBInstanceName": "MyDBInstance", "MasterUser": "UserName", "MasterPassword": "Password", "DBInstanceClass": "db.r4.large", "Purpose": "testing"}

      上書きを入力しない場合、テンプレートはスタックをデフォルト値で作成します。

      
                ステップ 4 のフィールドを示すコンソールのスクリーンショット: デプロイステージを追加します。
    6. [次へ] を選択します。

    7. [Create pipeline] を選択します。パイプラインの実行を許可します。2 つのステージで構成されたパイプラインが完成し、他のステージを追加する準備が整いました。

ステップ 3: 変更セットを作成するための AWS CloudFormation デプロイアクションを追加する

手動承認アクションの前に変更セットを作成することを AWS CloudFormation に許可するアクションをパイプラインに作成します。

  1. CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/) を開きます。

    [パイプライン] で、パイプラインを選択してから、[表示] を選択します。この図では、パイプラインのソースとデプロイのステージを示しています。

  2. [編集] モードで、パイプラインを編集するか、引き続きパイプラインを表示するかを選択します。

  3. 前のアクションで作成したスタックに対する変更セットを作成するデプロイアクションを追加します。

    1. [アクション名] に、「Change_Set」と入力します。[Action provider (アクションプロバイダ)] で、[AWS CloudFormation] を選択します。

    2. [入力アーティファクト] で、[SourceArtifact] を選択します。

    3. [アクションモード] で [変更セットの作成または置換] を選択します。

    4. [スタック名] に、次のように変数の構文を入力します。これは、変更セットを作成する対象のスタックの名前です。アクションには、デフォルトの名前空間 DeployVariables が割り当てられます。

      #{DeployVariables.StackName}
    5. [変更セット名] に、変更セットの名前を入力します。

      my-changeset
    6. [パラメータの上書き] で、Purpose パラメータを testing から production に変更します。

      { "DBClusterName": "MyDBCluster", "DBInstanceName": "MyDBInstance", "MasterUser": "UserName", "MasterPassword": "Password", "DBInstanceClass": "db.r4.large", "Purpose": "production"}
    7. [完了] をクリックしてアクションを保存します。

ステップ 4: 手動の承認アクションを追加する

パイプラインで手動承認アクションを作成します。

  1. [編集] モードで、パイプラインを編集するか、引き続きパイプラインを表示するかを選択します。

  2. 変更セットを作成するデプロイアクションの後に、手動承認アクションを追加します。このアクションを使用すると、パイプラインで変更セットを実行する前に、AWS CloudFormation で作成したリソース変更セットを確認できます。

ステップ 5: 変更セットを実行するための CloudFormation デプロイアクションを追加する

手動承認アクションの後に変更セットを実行することを AWS CloudFormation に許可するアクションをパイプラインに作成します。

  1. CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/) を開きます。

    [パイプライン] で、パイプラインを選択してから、[表示] を選択します。この図では、パイプラインのソースとデプロイのステージを示しています。

  2. [編集] モードで、パイプラインを編集するか、引き続きパイプラインを表示するかを選択します。

  3. 前のアクションで承認した変更セットを実行するデプロイアクションを追加します。

    1. [アクション名] に、「Execute_Change_Set」と入力します。[Action provider (アクションプロバイダ)] で、[AWS CloudFormation] を選択します。

    2. [入力アーティファクト] で、[SourceArtifact] を選択します。

    3. [アクションモード] で [変更セットの実行] を選択します。

    4. [スタック名] に、次のように変数の構文を入力します。これは、変更セットを作成する対象のスタックの名前です。

      #{DeployVariables.StackName}
    5. [変更セット名] に、前のアクションで作成した変更セットの名前を入力します。

      my-changeset
    6. [完了] をクリックしてアクションを保存します。

    7. パイプラインの実行を続行します。

ステップ 6: スタックを削除するための CloudFormation デプロイアクションを追加する

出力ファイルの変数からスタック名を取得し、スタックを削除することを AWS CloudFormation に許可する最後のアクションをパイプラインに作成します。

  1. CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/) を開きます。

    [パイプライン] で、パイプラインを選択してから、[表示] を選択します。この図では、パイプラインのソースとデプロイのステージを示しています。

  2. パイプラインを編集することを選択します。

  3. スタックを削除するデプロイアクションを追加します。

    1. [アクション名] で、[DeleteStack] を選択します。 [デプロイプロバイダ] で [CloudFormation] を選択します。

    2. [アクションモード] で、[スタックを削除する] をクリックします。

    3. [スタック名] に、次のように変数の構文を入力します。これは、アクションで削除するスタックの名前です。

      
                スタックを削除するためのデプロイアクションを追加する方法を示すコンソールのスクリーンショット。
    4. [完了] をクリックしてアクションを保存します。

    5. [保存] をクリックしてポリシーを保存します。

      
                ソース、デプロイ、承認、スタック削除のパイプラインステージを示す図。

    パイプラインは保存すると実行されます。