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 関数を構築します。
次のコンテンツを使用して、index.jsファイルを作成します:
index.js1 2 3 4 5 6 7
exports.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 変数を関数の名前に置き換えます。
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}'
この内容はお役に立ちましたか?