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

Lambda ベースのアプリケーションのデプロイメントを自動化する

前のセクションでは、SAM テンプレートを作成し、デプロイメントパッケージを生成し、AWS CLI を使用してサーバーレスアプリケーションを手動でデプロイする使用方法について学習しました。このセクションでは、次の AWS サービスを活用してデプロイメントプロセスを完全に自動化します。

  • CodePipeline: CodePipeline を使用して、サーバーレスアプリケーションをリリースするために必要なステップをモデル化し、視覚化し、自動化します。詳細については、「AWS CodePipeline とは何か」を参照してください

  • CodeBuild: CodeBuild を使用して、サーバーレスアプリケーションを構築、ローカルテスト、およびパッケージ化します。詳細については、「AWS Codebuild とは何か」を参照してください

  • AWS CloudFormation: AWS CloudFormation を使用してアプリケーションをデプロイします。詳細については、「AWS CloudFormation とは何か」を参照してください

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

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

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

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

    1. IAM コンソール (https://console.aws.amazon.com/iam/) にサインインします。

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

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

      • [Select Role Type] で、[AWS Service Roles] を選択してから [AWS CloudFormation] を選択します。これにより、ロールを引き受けるアクセス権限を AWS CloudFormation サービスに付与します。

      • [Attach Policy] で、[AWSLambdaExecute] を選択します。

      • 作成したロールを開き、[Permissions] タブで [Inline Policies] を展開し、[Create Role Policy] を選択します。

      • [Custom Policy] を選択し、[Select] を選択します。

      • [Policy Name] に、カスタムポリシーの名前を入力し、[Policy Document] フィールドに以下を貼り付けます。

        Copy
        { "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:account-id:function:*" ], "Effect": "Allow" }, { "Action": [ "apigateway:*" ], "Resource": [ "arn:aws:apigateway:region::*" ], "Effect": "Allow" }, { "Action": [ "iam:GetRole", "iam:CreateRole", "iam:DeleteRole" ], "Resource": [ "arn:aws:iam::account-id:role/*" ], "Effect": "Allow" }, { "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::account-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" } ], "Version": "2012-10-17" }
      • [Validate Policy] を選択して、[Apply Policy] を選択します。

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

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

  • 以下のコードを含む index.js file を追加する:

    Copy
    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 ゲートウェイ によってトリガーされる Lambda 関数を定義します。AWS SAM についての詳細は、「AWS サーバーレスアプリケーションモデル化」を参照してください。

    Copy
    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: nodejs4.3 CodeUri: ./ Events: MyTimeApi: Type: Api Properties: Path: /TimeResource Method: GET
  • buildspec.yml ファイルを追加します。ビルド仕様とは、AWS CodeBuild がビルドを実行するために使用する YAML 形式のビルドコマンドと関連設定のコレクションです。詳細については、「AWS CodeBuildの ビルド仕様リファレンス」を参照してください。この例では、ビルドアクションは次のとおりです:

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

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

      Copy
      version: 0.1 phases: install: commands: - npm install time - aws cloudformation package --template-file samTemplate.yaml --s3-bucket bucket-name --output-template-file NewSamTemplate.yaml artifacts: type: zip files: - NewSamTemplate.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:4.3.2 を選択します

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

    注記

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

    [Next step] を選択します。

  12. プロバイダのデプロイメントAWS CloudFormation を選択します。

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

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

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

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

  16. テンプレートファイル: NewSamTemplate.yaml と入力します。

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

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

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

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

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

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

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

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

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

  4. [Permissions] タブで [Attach Policy] を選択します。

  5. [Permissions] タブで、[Create Role Policy] を選択します。

  6. [Policy Generator]、[Select] の順に選択します。

  7. [AWS Service] リストで、[Amazon S3] を選択します。

  8. [Actions] の [PutObject] を選択します。

  9. [Amazon Resource Name (ARN)] に、「arn:aws:s3:::bucket-name*」と入力します。

  10. [Add Statement]、[Next Step] の順に選択します。

  11. [Review Policy] で、[Validate Policy] を選択してから、[Apply Policy] を選択します。

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

ベータ段階を完了するには次のステップに従ってください。

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

  2. アイコンを選択します。これはベータ段階用のものです。

  3. ベータ段階では、+ Action アイコンを選択します。これは既存のアクションの下に配置されています。

  4. カテゴリ: デプロイ を選択します。

  5. アクション: execute_cs を入力します。

  6. プロバイダのデプロイメントAWS CloudFormation を選択します。

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

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

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

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

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

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

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

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

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