メニュー
AWS Lambda
開発者ガイド

サーバーレスアプリケーションのパイプラインを構築する

次のチュートリアルでは、サーバーレスアプリケーションのデプロイメントを自動化する AWS CodePipeline を作成します。 まず、パイプラインをトリガーするためにソースステージを設定する必要があります。このチュートリアルでは、以下のことを行います。

  • GitHub を使用します。GitHub リポジトリを作成する手順については、「GitHub でリポジトリを作成する」を参照してください。

  • 次に示すように、AWS CloudFormation ロールを作成し、そのロールに AWSLambdaExecute ポリシーを追加します。

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

    2. IAM ユーザーガイドの「AWS のサービスにアクセス許可を委任するロールの作成」のステップに従って IAM ロール (実行ロール) を作成し、「AWS サービスのロールを作成するには」セクションに移動してください。ロールを作成するステップに従うときに、次のことに注意してください。

      • [ロールタイプの選択] で [AWS サービスロール] を選択し、続いて [CloudFormation] を選択します。[Next: Permissions] を選択します。

      • [アクセス権限ポリシーをアタッチする] では、検索バーを使用して検索し、[AWSLambdaExecute] を選択します。[Next: Review] を選択します。

      • [Role Name] では、AWS アカウント内で一意の名前 (たとえば、cloudformation-lambda-execution-role) を使用し、[Create role] を選択します。

      • 作成したロールを開き、[アクセス許可] タブで [インラインポリシーの追加] を選択します。

      • [ポリシーの作成] で [JSON] タブを選択し、次を入力します。

        注記

        regionid のプレースホルダーはお客様のリージョンとアカウント ID に置き換えてください。

        { "Statement": [ { "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:GetBucketVersioning" ], "Resource": "*", "Effect": "Allow" }, { "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::codepipeline*" ], "Effect": "Allow" }, { "Action": [ "lambda:*" ], "Resource": [ "arn:aws:lambda:region:id:function:*" ], "Effect": "Allow" }, { "Action": [ "apigateway:*" ], "Resource": [ "arn:aws:apigateway:region::*" ], "Effect": "Allow" }, { "Action": [ "iam:GetRole", "iam:CreateRole", "iam:DeleteRole", "iam:PutRolePolicy" ], "Resource": [ "arn:aws:iam::id:role/*" ], "Effect": "Allow" }, { "Action": [ "iam:AttachRolePolicy", "iam:DeleteRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::id:role/*" ], "Effect": "Allow" }, { "Action": [ "iam:PassRole" ], "Resource": [ "*" ], "Effect": "Allow" }, { "Action": [ "cloudformation:CreateChangeSet" ], "Resource": [ "arn:aws:cloudformation:region:aws:transform/Serverless-2016-10-31" ], "Effect": "Allow" }, { "Action": [ "codedeploy:CreateApplication", "codedeploy:DeleteApplication", "codedeploy:RegisterApplicationRevision" ], "Resource": [ "arn:aws:codedeploy:region:id:application:*" ], "Effect": "Allow" }, { "Action": [ "codedeploy:CreateDeploymentGroup", "codedeploy:CreateDeployment", "codedeploy:GetDeployment" ], "Resource": [ "arn:aws:codedeploy:region:id:deploymentgroup:*" ], "Effect": "Allow" }, { "Action": [ "codedeploy:GetDeploymentConfig" ], "Resource": [ "arn:aws:codedeploy:region:id:deploymentconfig:*" ], "Effect": "Allow" } ], "Version": "2012-10-17" }
      • [Validate Policy] を選択して、[Apply Policy] を選択します。

ステップ 1: リポジトリの設定

リポジトリの設定には、Lambda がサポートする任意のランタイムを使用できます。次の例では、Node.js を使用します。

リポジトリを設定するには、次の通りに実行します:

  • 以下のコードを含む index.js file を追加します。

    var time = require('time'); exports.handler = (event, context, callback) => { var currentTime = new time.Date(); currentTime.setTimezone("America/Los_Angeles"); callback(null, { statusCode: '200', body: 'The time in Los Angeles is: ' + currentTime.toString(), }); };
  • 以下のコンテンツを含む samTemplate.yaml ファイルを追加します。これはアプリケーションのリソースを定義する SAM テンプレートです。この SAMの テンプレートは API Gateway によってトリガーされる Lambda 関数を定義します。runtime パラメータは nodejs6.10 を使用しますが、nodejs8.10 も指定できることに注意してください。AWS SAM についての詳細は、「AWS サーバーレスアプリケーションモデル化」を参照してください。

    AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Outputs the time Resources: TimeFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs6.10 CodeUri: ./ Events: MyTimeApi: Type: Api Properties: Path: /TimeResource Method: GET
  • buildspec.yml ファイルを追加します。ビルド仕様とは、AWS CodeBuild がビルドを実行するために使用する YAML 形式のビルドコマンドと関連設定のコレクションです。詳細については、「AWS CodeBuildの ビルド仕様リファレンス」を参照してください。この例では、ビルドアクションは次のとおりです:

    • npm を使用して時間パッケージをインストールします。

    • Package コマンドを実行して、パイプラインの段階的なデプロイメントステップでデプロイパッケージを準備します。パッケージコマンドの詳細については、「S3 バケットへのローカルアーティファクトのアップロード」を参照してください

      version: 0.1 phases: install: commands: - npm install time - aws cloudformation package --template-file samTemplate.yaml --s3-bucket bucket-name --output-template-file outputSamTemplate.yaml artifacts: type: zip files: - samTemplate.yaml - outputSamTemplate.yaml

      SAM でデプロイメントパッケージを手動でパッケージ化する場合の手順と同様に、--s3-bucket パラメーターの値と Amazon S3 バケットの名前を指定する必要があることに注意してください。 前のチュートリアルの 梱包 ステップでこれについて説明しています。

ステップ 2: パイプラインの作成

AWS CodePipeline を作成するには、次のステップに従ってください。

  1. AWS マネジメントコンソール にサインインして、AWS CodePipeline コンソールを開きます。

  2. [Get Started Now] を選択します。

  3. [パイプラインの名前] ボックスにパイプラインの名前を入力し、[次のステップ] を選択します。

  4. ソースプロバイダー: GitHub を選択します。

  5. Connect to GitHub に接続: を選択したら、接続するリポジトリブランチを選択します。選択したブランチへの git はパイプラインをトリガーします。[Next step] を選択します。

  6. AWS CodeBuildビルドプロバイダ として選択します。

  7. ビルドプロジェクトの新規作成 を選択してプロジェクト名を入力します。

  8. Ubuntu をオペレーションシステムに選択します。

  9. Node.js をランタイムに選択します。

  10. バージョンaws/codebuild/nodejs:version を選択します

  11. [ビルド仕様] で Use the buildspec.yml in the source code root directory を選択します。

  12. ビルドプロジェクトの保存 を選択します。

    注記

    AWS CodeBuild のサービスロールがユーザーに代わり自動的に作成されます。

    [Next step] を選択します。

  13. [デプロイプロバイダ*] で [AWS CloudFormation] を選択します。

    このオプションを選択すると、AWS CloudFormation コマンドが SAM テンプレートのデプロイに使用されます。詳細については、「AWS SAM を使用するサーバーレスリソース」を参照してください。

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

  15. [スタックの名前:] で「MyBetaStack」と入力します。

  16. セット名の変更: MyChangeSet と入力します。

  17. テンプレートファイルoutputSamTemplate.yaml と入力します。

  18. 設備 CAPABILITY_IAM を選択します。

  19. [Role] で、このチュートリアルの最初に作成した AWS CloudFormation ロールを選択し、[Next step] を選択します。

  20. [Create role] を選択します。次へ を選択して、許可を選択します。[Next step] を選択します。

  21. パイプラインを確認し、パイプラインの作成 を選択します。

ステップ 3: 生成されたサービスポリシーを更新する

以下のステップを完了して、CodeBuild が Amazon S3 バケットにビルドアーティファクトをアップロードできるようにします。

  1. IAM マネジメントコンソールに移動します。

  2. [Roles] を選択します。

  3. プロジェクト用に生成されたサービスロール (通常は code-build-project-name-service-role) を開きます。

  4. [アクセス許可] タブで [インラインポリシーの追加] を選択します。

  5. [サービス] で [サービスの選択] を選択します。

  6. [以下のサービスを選択してください] で [S3] を選択します。

  7. [アクション] で [アクションの選択] を選択します。

  8. [アクセスレベルグループ] で [書き込み] を展開し、[PutObject] を選択します。

  9. [リソース] を選択し、[すべて] チェックボックスを選択します。

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

  11. [名前*] を入力し、[ポリシーの作成] を選択します。続いて、前のセクションで作成したパイプラインに戻ります。

ステップ 4: ベータデプロイメント段階を完了する

ベータ段階を完了するには次のステップを使用します。

  1. [Edit] を選択します。

  2. [MyBetaStack] の横の + アイコンを選択します。

  3. [アクションカテゴリー:] で [デプロイ] が選択されていない場合には、選択します。

  4. [デプロイプロバイダ*] で [AWS CloudFormation] が選択されていない場合には、選択します。

  5. [アクションモード*] で [変更セットの実行] を選択します。 これは、前回のチュートリアルの デプロイメント のステップで説明したように、手動でパッケージをデプロイする場合のステップと類似しています。CreateChangeSet は SAM テンプレートを完全な AWS CloudFormation 形式に変換し、deployChangeSet がその AWS CloudFormation テンプレートをデプロイします。

  6. [スタックの名前*] で「MyBetaStack」を入力または選択します。

  7. [セット名の変更*] で [MyChangeSet] と入力します。

  8. [Add action] を選択します。

  9. [パイプラインの変更を保存する] を選択します。

  10. [Save and continue] を選択します。

パイプラインの準備が完了しました。このパイプラインに接続するブランチへの git プッシュはデプロイをトリガーします。パイプラインをテストし、アプリケーションを初めてデプロイする場合、次のいずれかを実行します:

  • パイプラインに接続されているブランチに git プッシュを実行します。

  • AWS CodePipeline コンソールに移動して、作成したパイプラインの名前を選択し、[変更のリリース] を選択します。

次のステップ

コードの段階的なデプロイ