Lambda 関数の更新を AWS にデプロイする

このガイドでは、パイプを使用して AWS の既存の Lambda 関数を更新するプロセスについて説明します。また、Lambda 関数のエイリアスを構成し、それらを使用して、新しく公開されたバージョンをステージングおよび本番環境にプロモートする方法についても説明します。このページで紹介するサンプルが含まれるリポジトリをご確認ください。

前提条件

以下が必要です。

  • AWS コンソールへのアクセス。

  • 既存の Lambda 関数。

  • Lambda 関数を更新するのに十分なアクセス許可とアクセス権を持つ IAM ユーザー

AWS では、IAM ユーザーをセットアップするためのチュートリアルと、AWS コンソールを使用して Lambda 関数を作成する方法のチュートリアルが提供されています。

AWSLambdaFullAccess ポリシーを IAM ユーザーに関連付け、Lambda 関数を操作するための完全な権限を付与することをおすすめします。

AWS 資格情報を Bitbucket Pipelines に追加する

Lambda 関数の更新に使用される IAM ユーザーの認証情報を含む、3 つの変数を Bitbucket Pipelines に追加する必要があります。

  • AWS_ACCESS_KEY_ID: IAM ユーザーの AWS アクセス キー。

  • AWS_SECRET_ACCESS_KEY: IAM ユーザーの AWS 秘密アクセス キー。安全な場所で保管されている必要があります。

  • AWS_DEFAULT_REGION: AWS リージョン。

基本的な例: Lambda への Javascript 関数のデプロイ

Lambda 関数を更新するには、2 つの手順が必要です。

  • 圧縮された関数コードをビルドする。

  • zip 形式のコードを AWS にデプロイする。

この例では、単純な node.js ベースの Lambda 関数を構築します。

  1. 次のコンテンツを使用して、index.jsファイルを作成します:

    index.js

    1 2 3 4 5 6 7 exports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello world') }; return response; };
  2. bitbucket-pipelines.yml ファイルには 2 つのセクションがあります。ステップは次のとおりです。

    1. Lambda 関数を更新するのに十分なアクセス許可とアクセス権を持つ Lambda codeAn IAM ユーザーをビルドおよび圧縮する

    2. 更新されたコードを AWS にプッシュする

    以下の例では、FUNCTION_NAME 変数を関数の名前に置き換えます。

bitbucket-pipelines.yml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 - step: name: Build and package script: - apt-get update && apt-get install -y zip - zip code.zip index.js artifacts: - code.zip - step: name: Update Lambda code script: - pipe: atlassian/aws-lambda-deploy:0.2.1 variables: AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION} FUNCTION_NAME: 'my-function' COMMAND: 'update' ZIP_FILE: 'code.zip'

高度な例: 複数の環境でエイリアスを使用する

AWS では、エイリアスを特定のバージョンの Lambda 関数に関連付ける機能を提供しています。Bitbucket Pipeline のデプロイ環境の名前を表すエイリアスとともに使用すると、テスト、ステージング、本番環境を通じて関数のバージョンをプロモートできます。

前の例に続けて、最初の 2 ステップを組み合わせ、テスト、ステージング、および本番環境を通じて関数をプロモートするステップを追加しています。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 pipelines: default: - step: # Build and package the Lambda function. name: Build and package script: - apt-get update && apt-get install -y zip - zip code.zip index.js # Upload the Lambda - make the version number #available to subsequent steps via artifacts. - pipe: atlassian/aws-lambda-deploy:0.2.1 variables: AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION} FUNCTION_NAME: 'my-function' COMMAND: 'update' ZIP_FILE: 'code.zip' # The pipe exports the newly published # Lambda version to a file. artifacts: - pipe.meta.env # You can optionally use AWS Lambda aliases # to map the newly published Lambda # function version to conceptual environments. - step: name: Deploy to Test deployment: test script: # Read the 'function_version' from # the update pipe into environment variables. - source pipe.meta.env # Point the test alias to the function. - pipe: atlassian/aws-lambda-deploy:0.2.1 variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION FUNCTION_NAME: 'my-function' COMMAND: 'alias' ALIAS: 'test' VERSION: '${function_version}' - step: name: Deploy to Staging deployment: staging script: # Read the 'function_version' from # the update pipe into environment variables. - source pipe.meta.env # Point the 'staging' alias to the function. - pipe: atlassian/aws-lambda-deploy:0.2.1 variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION FUNCTION_NAME: 'my-function' COMMAND: 'alias' ALIAS: 'staging' VERSION: '${function_version}' - step: name: Deploy to Production deployment: production script: # Read the 'function_version' from # the update pipe into environment variables. - source pipe.meta.env # Point the 'production' alias to the function. - pipe: atlassian/aws-lambda-deploy:0.2.1 variables: AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION FUNCTION_NAME: 'my-function' COMMAND: 'alias' ALIAS: 'production' VERSION: '${function_version}'

その他のヘルプ