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

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

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

重要

パイプライン作成の一環として、CodePipeline は、ユーザーが指定した S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットを所有している AWS アカウントが安全で信頼できることを確認してください。

このチュートリアルでは、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 は、パッケージ化したアプリケーションの保存先の S3 バケットに置き換えます。

version: 0.2 phases: install: runtime-versions: python: 3.8 build: commands: - sam package --template-file template.yml --s3-bucket bucketname --output-template-file packaged-template.yml artifacts: files: - packaged-template.yml

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

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

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

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

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

  4. [ステップ 1: 作成オプションを選択する] ページの [作成オプション] で、[カスタムパイプラインを構築する] オプションを選択します。[次へ] を選択します。

  5. [パイプラインの作成] を選択します。[ステップ 2: パイプラインの設定を選択する] ページで、[パイプライン名] にパイプラインの名前を入力します。

  6. [パイプラインタイプ] で、[V2] を選択します。詳細については、「パイプラインのタイプ」を参照してください。[次へ] を選択します。

  7. サービスロール で、新しいサービスロール を選択し、CodePipeline に IAM でのサービスロールの作成を許可します。

  8. [詳細設定] をデフォルト設定のままにし、[次へ] を選択します。

  9. [ステップ 3: ソースステージの追加] ページの [ソースプロバイダー] で、[GitHub] を選択します。

  10. 接続 で、既存の接続を選択するか、新規の接続を作成します。GitHub ソースアクション用の接続を作成または管理するには、GitHub コネクション を参照してください。

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

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

  13. ソースアクションの残りはデフォルトのままにしておきます。[次へ] を選択します。

  14. [ステップ 4: ビルドステージの追加] ページで、ビルドステージを追加します。

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

    2. [プロジェクトを作成] を選択します。

    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. [次へ] を選択します。

  15. [ステップ 5: テストステージの追加] で、[テストステージをスキップ] を選択し、もう一度 [スキップ] を選択して警告メッセージを受け入れます。

    [次へ] を選択します。

  16. [ステップ 6: デプロイステージの追加] ページで、[デプロイステージをスキップ] を選択し、もう一度 [スキップ] を選択して警告メッセージを受け入れます。[次へ] を選択します。

  17. [ステップ 7: レビュー] で、[パイプラインを作成する] を選択します。ステージを示す図が表示されます。

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

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

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

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

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

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

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

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

    8. [Save changes] (変更の保存) をクリックします。

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

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

注記

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

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

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

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

  4. [CloudFormation スタックを表示する] をクリックして、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 でアプリケーションに変更を加えます。たとえば、Metadata テンプレートファイルの AWS SAM セクションでアプリケーションの説明を変更します。変更をコミットして GitHub ブランチにプッシュします。これにより、パイプラインの実行がトリガーされます。パイプラインが完了したら、アプリケーションが更新されて変更が反映されていることを AWS Serverless Application Repository で確認します。