CodePipeline
ユーザーガイド (API バージョン 2015-07-09)

チュートリアル: AWS Serverless Application Repository に対してサーバーレスアプリケーションを発行するパイプラインを作成する

AWS CodePipeline を使用し、AWS Serverless Application Repository に対して AWS SAM サーバーレスアプリケーションを継続的に配信できます。

このチュートリアルでは、GitHub でホストされているサーバーレスアプリケーションをビルドして AWS Serverless Application Repository に自動的に発行するためのパイプラインを作成して設定する方法を示します。このパイプラインでは、ソースプロバイダとして GitHub を使用し、ビルドプロバイダとして CodeBuild を使用します。サーバーレスアプリケーションを AWS Serverless Application Repository に発行するには、アプリケーションを (AWS Serverless Application Repository から) デプロイし、このアプリケーションで作成した Lambda 関数をパイプラインの呼び出しアクションプロバイダとして関連付けます。これにより、一切のコードを記述することなく、アプリケーションの更新を継続的に AWS Serverless Application Repository に配信できます。

重要

この手順でパイプラインに追加するアクションの多くでは、AWS リソースを必要とします。これらのリソースはパイプラインを作成する前に作成する必要があります。ソースアクション用の AWS リソースは、パイプラインを作成する AWS リージョンと同じリージョンで常に作成する必要があります。たとえば、米国東部 (オハイオ) リージョンでパイプラインを作成する場合、CodeCommit リポジトリは米国東部 (オハイオ) リージョンにあることが必要です。

パイプラインの作成時にクロスリージョンアクションを追加できます。クロスリージョンアクション用の AWS リソースは、アクションを実行する予定の AWS リージョンと同じリージョンにあることが必要です。クロスリージョンアクションの詳細については、「CodePipeline でクロスリージョンアクションを追加する」を参照してください。

開始する前に

このチュートリアルでは、以下のことを前提としています。

ステップ 1: buildspec.yml ファイルを作成する

buildspec.yml ファイルを以下のとおりに作成し、これをサーバーレスアプリケーションの GitHub リポジトリに追加します。template.yml は、アプリケーションの AWS SAM テンプレートに置き換えます。bucketname は、パッケージ化したアプリケーションの保存先の Amazon S3 バケットに置き換えます。

version: 0.2 phases: build: commands: - pip install --upgrade pip - pip install pipenv --user - pipenv install awscli aws-sam-cli - pipenv run sam package --template-file template.yml --s3-bucket bucketname --output-template-file packaged-template.yml artifacts: files: - packaged-template.yml

ステップ 2: パイプラインを作成して設定する

以下のステップに従って、サーバーレスアプリケーションの発行先の AWS リージョンでパイプラインを作成します。

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

  2. 必要に応じて、サーバーレスアプリケーションの発行先の AWS リージョンに切り替えます。

  3. [パイプラインの作成] を選択します。[Choose pipeline settings (パイプラインの設定の選択)] ページで、[パイプライン名] にパイプラインの名前を入力します。

  4. [サービスロール] で、[New service role (新しいサービスロール)] は選択したままにして、[Role name (ロール名)] は変更しません。

  5. [Artifact store (アーティファクトストア)] で、[デフォルトの場所] を選択します。デフォルトのアーティファクトストア (デフォルトとして指定した Amazon S3 アーティファクトバケットなど) が、選択した AWS リージョンのパイプラインで使用されます。

    注記

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

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

  6. [次へ] を選択します。

  7. [Add source stage (ソースステージの追加)] ページの [ソースプロバイダ] で、[GitHub]、[GitHub に接続] の順に選択します。

  8. ブラウザウィンドウで、[Authorize aws-codesuite (aws-codesuite の認証)] を選択します。これにより、パイプラインでリポジトリをソースにし、新しいコードがリポジトリにプッシュされたことを検出するウェブフックを使用することができます。

  9. [リポジトリ] で、GitHub ソースリポジトリを選択します。

  10. [ブランチ] で、GitHub ブランチを選択します。

  11. [次へ] を選択します。

  12. [Add build stage (ビルドステージの追加)] ページで、ビルドステージを追加します。

    1. [ビルドプロバイダ] で、[AWS CodeBuild] を選択します。[リージョン] で、パイプラインリージョンを使用します。

    2. [Create project (プロジェクトの作成)] を選択します。

    3. [プロジェクト名] に、このビルドプロジェクトの名前を入力します。

    4. [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。[Operating system] で、[Ubuntu] を選択します。

    5. [ランタイム] と [ランタイムバージョン] で、サーバーレスアプリケーションに必要なランタイムとバージョンを選択します。

    6. [サービスロール] で、[New service role (新しいサービスロール)] を選択します。

    7. [ビルド仕様] で、[Use a buildspec file (ビルド仕様ファイルの使用)] を選択します。

    8. [Continue to CodePipeline (CodePipeline に進む)] を選択します。これにより、CodePipeline コンソールが開き、設定用にリポジトリ内の buildspec.yml を使用する CodeBuild プロジェクトが作成されます。ビルドプロジェクトでは、サービスロールを使用して AWS のサービスのアクセス許可を管理します。このステップには数分かかる場合があります。

    9. [次へ] を選択します。

  13. [Add deploy stage (デプロイステージの追加)] ページで、[Skip deploy stage (デプロイステージのスキップ)] を選択し、[スキップ] を選択して警告メッセージを受け入れます。[次へ] を選択します。

  14. [Create pipeline] を選択します。ソースとビルドステージを示す図が表示されます。

  15. パッケージ化されたアプリケーションの保存先の Amazon S3 バケットにアクセスする権限を CodeBuild サービスロールに付与します。

    1. 新しいパイプラインの [ビルド] ステージで、[CodeBuild] を選択します。

    2. [Build details (ビルドの詳細)] タブを選択します。

    3. [環境] で、CodeBuild サービスロールを選択して IAM コンソールを開きます。

    4. CodeBuildBasePolicy の選択を展開し、[Edit policy (ポリシーの編集)] を選択します。

    5. [JSON] を選択します。

    6. 新しいポリシーステートメントを以下の内容で追加します。このステートメントにより、パッケージ化されたアプリケーションの保存先の Amazon S3 バケットにオブジェクトを配置することを CodeBuild に許可します。bucketname は、Amazon S3 バケット名に置き換えます。

      { "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucketname/*" ], "Action": [ "s3:PutObject" ] }
    7. [ポリシーの確認] を選択します。

    8. [Save changes] を選択します。

ステップ 3: 発行アプリケーションをデプロイする

以下のステップに従って、Lambda 関数が含まれているアプリケーションをデプロイします。この関数は AWS Serverless Application Repository に対する発行を実行します。このアプリケーションは aws-serverless-codepipeline-serverlessrepo-publish です。

注記

このアプリケーションは、パイプラインと同じ AWS リージョンにデプロイする必要があります。

  1. アプリケーションのページに移動し、[デプロイ] を選択します。

  2. [I acknowledge that this app creates custom IAM roles (このアプリケーションがカスタム IAM ロールを作成することを承認します)] を選択します。

  3. [デプロイ] を選択します。

  4. [View AWS CloudFormation Stack (AWS CloudFormation スタックの表示)] を選択して AWS CloudFormation コンソールを開きます。

  5. [リソース] セクションを展開します。ServerlessRepoPublish (AWS::Lambda::Function 型) が表示されます。このリソースの物理 ID を書き留めます。次のステップで使用します。この物理 ID は、CodePipeline で新しい発行アクションを作成するときに使用します。

ステップ 4: 発行アクションを作成する

以下のステップに従って、パイプラインの発行アクションを作成します。

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

  2. 左のナビゲーションセクションで、編集するパイプラインを選択します。

  3. [編集] を選択します。

  4. 現在のパイプラインの最後のステージが終わったら、[+ Add stage (+ ステージの追加)] を選択します。[Stage name (ステージ名)] に名前 (Publish など) を入力し、[Add stage (ステージの追加)] を選択します。

  5. 新しいステージで、[+ Add action group (+ アクショングループの追加)] を選択します。

  6. アクション名を入力します。[アクションプロバイダ] の [呼び出し] で、[AWS Lambda] を選択します。

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

  8. [関数名] で、前のステップで書き留めた Lambda 関数の物理 ID を指定します。

  9. アクションの [保存] を選択します。

  10. ステージの [完了] を選択します。

  11. 右上の [保存] を選択します。

  12. パイプラインを検証するには、GitHub でアプリケーションに変更を加えます。たとえば、AWS SAM テンプレートファイルの Metadata セクションでアプリケーションの説明を変更します。変更をコミットして GitHub ブランチにプッシュします。これにより、パイプラインの実行がトリガーされます。パイプラインが完了したら、アプリケーションが更新されて変更が反映されていることを AWS Serverless Application Repository で確認します。