Lambda 機能の更新を AWS にデプロイする
このガイドでは、パイプを使用して AWS の既存の Lambda 関数を更新するプロセスについて説明します。また、Lambda 関数のエイリアスを構成し、それらを使用して、新しく公開されたバージョンをステージングおよび本番環境にプロモートする方法についても説明します。このページで紹介するサンプルが含まれるリポジトリをご確認ください。
Prerequisites
以下が必要です。
AWS コンソールへのアクセス。
既存の Lambda 関数。
Lambda 関数を更新するのに十分なアクセス許可とアクセス権を持つ IAM ユーザー
AWS では、IAM ユーザーをセットアップするためのチュートリアルと、AWS コンソールを使用して 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 関数を構築します。
次のコンテンツを持つ index.js ファイルを作成します。
index.jsexports.handler = async (event) => { const response = { statusCode: 200, body: JSON.stringify('Hello world') }; return response; };
bitbucket-pipelines.yml
ファイルには 2 つのセクションがあります。ステップは次のとおりです。Lambda 関数を更新するのに十分なアクセス許可とアクセス権を持つ Lambda codeAn IAM ユーザーをビルドおよび圧縮する
更新されたコードを AWS にプッシュする
以下の例では、
FUNCTION_NAME
変数を関数の名前に置き換えます。
- 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 ステップを組み合わせ、テスト、ステージング、および本番環境を通じて関数をプロモートするステップを追加しています。
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}'