

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: サーバーレスアプリケーションを に発行するパイプラインを作成する AWS Serverless Application Repository
<a name="tutorials-serverlessrepo-auto-publish"></a>

を使用して 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、[アプリケーションを](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~aws-serverless-codepipeline-serverlessrepo-publish ) ( から AWS Serverless Application Repository) デプロイし、そのアプリケーションによって作成された Lambda 関数をパイプラインの呼び出しアクションプロバイダーとして関連付けます。その後、コードを記述することなく AWS Serverless Application Repository、アプリケーションの更新を に継続的に配信できます。

**重要**  
この手順でパイプラインに追加するアクションの多くには、パイプラインを作成する前に作成する必要がある AWS リソースが含まれます。ソースアクションの AWS リソースは常に、パイプラインを作成するのと同じ AWS リージョンで作成する必要があります。例えば、米国東部 (オハイオ) リージョンにパイプラインを作成している場合、CodeCommit リポジトリは米国東部 (オハイオ) リージョンにある必要があります。  
パイプラインの作成時にクロスリージョンアクションを追加できます。クロスリージョンアクションの AWS リソースは、アクションを実行する予定のリージョンと同じ AWS リージョンに存在する必要があります。詳細については、「[CodePipeline にクロスリージョンアクションを追加する](actions-create-cross-region.md)」を参照してください。

## [開始する前に]
<a name="tutorials-serverlessrepo-auto-publish-prereq"></a>

このチュートリアルでは、以下のことを前提としています。
+ [AWS Serverless Application Model (AWS SAM)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/) と [AWS Serverless Application Repository](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/) をよく理解していること。
+ CLI AWS Serverless Application Repository を使用して に発行したサーバーレスアプリケーションが GitHub AWS SAM でホストされている。サンプルアプリケーションを に公開するには AWS Serverless Application Repository、「 *AWS Serverless Application Repository デベロッパーガイド*[」の「クイックスタート: アプリケーションの公開](https://docs.aws.amazon.com/serverlessrepo/latest/devguide/serverlessrepo-quick-start.html)」を参照してください。独自のアプリケーションを に発行するには AWS Serverless Application Repository、「 *AWS Serverless Application Model デベロッパーガイド*[」の「 CLI AWS SAM を使用したアプリケーションの発行](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-template-publishing-applications.html)」を参照してください。

## ステップ 1: buildspec.yml ファイルを作成する
<a name="serverlessrepo-auto-publish-create-buildspec"></a>

`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: パイプラインを作成して設定する
<a name="serverlessrepo-auto-publish-create-pipeline"></a>

サーバーレスアプリケーションを公開 AWS リージョン する にパイプラインを作成するには、次の手順に従います。

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

1. 必要に応じて、サーバーレスアプリケーションを公開 AWS リージョン する に切り替えます。

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

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

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

1. **[パイプラインタイプ]** で、**[V2]** を選択します。詳細については、「[パイプラインのタイプ](pipeline-types.md)」を参照してください。**[Next]** (次へ) を選択します。

1. **サービスロール** で、**新しいサービスロール** を選択して、CodePipeline が IAM でサービスロールを作成できるようにします。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   [**次へ**] を選択します。

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

1. **ステップ 7: 確認**で、**パイプラインの作成**を選択します。ステージを示す図が表示されます。

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

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

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

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

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

   1. **JSON** を選択します。

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

      ```
              {
                  "Effect": "Allow",
                  "Resource": [
                      "arn:aws:s3:::{{bucketname}}/*"
                  ],
                  "Action": [
                      "s3:PutObject"
                  ]
              }
      ```

   1. **[ポリシーの確認]** を選択します。

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

## ステップ 3: 発行アプリケーションをデプロイする
<a name="serverlessrepo-auto-publish-deploy-app"></a>

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

**注記**  
パイプライン AWS リージョン と同じ にアプリケーションをデプロイする必要があります。

1. [アプリケーション](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:077246666028:applications~aws-serverless-codepipeline-serverlessrepo-publish )のページに移動し、[**デプロイ**] を選択します。

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

1. **[デプロイ]** をクリックします。

1. ** CloudFormation スタックの表示**を選択して CloudFormation コンソールを開きます。

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

## ステップ 4: 発行アクションを作成する
<a name="serverlessrepo-auto-publish-create-action"></a>

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

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

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

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

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

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

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

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

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

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

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

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

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