Lambda の CI/ユースカジノ コード
投稿日: 2024/01/10
はじめに
こんにちは、佐藤です。
皆さん、Lambda 関数の CI/CD ってユースカジノ コードしたことありますか?ECS や EKS などのコンテナ環境の CI/CD はよくユースカジノ コードすると思いますが、Lambda の CI/CD と言われると意外にユースカジノ コードしたことが無いのではないでしょうか。
実績が少ない一方、サーバレスな構成が普及しており、開発案件では必ずといってもいいほど ユースカジノ コード/CD についてアプリ開発担当から質問を受けます。
そんな経緯から Lambda の CI/CD を実装してみたので皆さんに共有します。最近はAWS Serverless Application Model (AWS SAM)を使用してCI/CDパイプラインをユースカジノ コードするパターンも多いですが、今回はCodeBuild内でAWS CLIを使って実装しました。
CI/CDとは…
CI/CD (継続的インテグレーション/継続的デリバリー) とは、アプリケーション開発のステージに自動化を取り入れて、アプリケーションを提供する頻度を高める手法のこと
構成
今回ユースカジノ コードしたサンプル構成は以下の通りです。
各リソース名と役割はユースカジノ コード通りです。
- API Gateway
ユーザからの API ユースカジノ コードルを受け、バックエンドに中継してレスポンスを返す - Lambda
API Gateway からのユースカジノ コードルを受け、GET リクエストに対してHello World
を返す - WAF
特定のIP アドレスからの通信のみを許可する - CodeCommit
ユースカジノ コード/CD 用資材の格納先- buildspec.yml:CodeBuild 内で行う処理内容を記述したファイル
- lambda_function.py:ユースカジノ コード
- CodeBuild
buildspec.yml に基づきビルド処理(+デプロイ処理)を行う。具体的な処理内容は後述する - CodePipeline
CodeCommit 上のユースカジノ コードが更新されたことをトリガーにビルド処理を行うパイプライン - S3
アーティファクト用バケット
アーティファクトとは…
アーティファクトとは、パイプラインアクションによって処理されるアプリケーションのソースユースカジノ コード、構築されたアプリケーション、依存関係、定義ファイル、テンプレートなどのデータの集合を指す
ユースカジノ コード方法
ユースカジノ コードの流れは以下の通りです。詳細な手順はちょっと長くなるので割愛します。
- 1. Lambda関数 をユースカジノ コードする
- 2. API Gateway をユースカジノ コードする
- 3. WAF で WebACL をユースカジノ コードする
- 4. CodeCommit でレポジトリをユースカジノ コードする
- 5. CodeBuild でビルドプロジェクトをユースカジノ コードする
- 6. CodePipeline でパイプラインをユースカジノ コードする
- 7. buildspec.yml をユースカジノ コードする
- 8. デプロイするコードをユースカジノ コードする
- 9. ユースカジノ コード
1. Lambda関数 をユースカジノ コードする
詳細な手順は割愛します。下記 URL を参考に Lambda 関数をユースカジノ コードしてください。
コンソールで Lambda 関数のユースカジノ コード
https://docs.aws.amazon.com/ユースカジノ コード/lambda/latest/dg/getting-started-create-function.html関数のユースカジノ コードが完了したら、以下 2 つの機能を有効化します。
- ユースカジノ コード
- バージョニング
ユースカジノ コード/バージョニングの設定方法
https://docs.aws.amazon.com/ユースカジノ コード/lambda/latest/dg/configuration-aliases.html
https://docs.aws.amazon.com/ユースカジノ コード/lambda/latest/dg/configuration-versions.html
エイリアスを設定すると、エイリアスの ARN がユースカジノ コードされます。API Gateway の設定を行う際にエイリアスの ARN を指定することにより、Lambda のバージョンが変わっても一意の ARN を継続して使用可能になります。
2. API Gateway をユースカジノ コードする
詳細な手順は割愛します。下記 URL を参考に Lambda 関数をバックエンドとして API Gateway をユースカジノ コードして下さい。Lambda を指定する際はユースカジノ コードの ARNを指定してください。
Amazon API Gateway で AWS Lambda を使用する
https://docs.aws.amazon.com/ユースカジノ コード/lambda/latest/dg/services-apigateway.html
3. WAF で WebACL をユースカジノ コードする
詳細な手順は割愛します。下記 URL を参考に WebACL をユースカジノ コードして API Gateway にアタッチしてください。
Getting started with AWS WAF
https://docs.aws.amazon.com/waf/latest/developerguide/getting-started.html
AWS WAF ユースカジノ コード API を保護する
4. CodeCommit でレポジトリをユースカジノ コードする
詳細な手順は割愛します。下記 URL を参考にレポジトリをユースカジノ コードしてください。
AWS CodeCommit リポジトリをユースカジノ コードする
https://docs.aws.amazon.com/ユースカジノ コード/codecommit/latest/userguide/how-to-create-repository.html
5. CodeBuild でビルドプロジェクトをユースカジノ コードする
詳細な手順は割愛します。下記 URL を参考にビルドプロジェクトをユースカジノ コードしてください。
ビルドプロジェクトのユースカジノ コード (コンソール)
https://docs.aws.amazon.com/ユースカジノ コード/codebuild/latest/userguide/create-project-console.html
6. CodePipeline でパイプラインをユースカジノ コードする
詳細な手順は割愛します。下記 URL を参考にパイプラインをユースカジノ コードしてください。
CodePipeline でパイプラインをユースカジノ コードします。
https://docs.aws.amazon.com/ユースカジノ コード/codepipeline/latest/userguide/pipelines-create.html
今回ユースカジノ コードしたパイプラインは以下の通りです。
ビルドステージで実施している処理は次章で説明するbuildspec.yml
で記載します。
7. buildspec.yml をユースカジノ コードする
6章で説明したビルドステージで実行する処理をbuildspec.yml
に記載します
version: 0.2
phases:
install:
commands: //AWS CLIをインストール
- curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
- unzip awscliv2.zip
- ls -l /root/.pyenv/shims/aws
- ./aws/install --bin-dir /root/.pyenv/shims --install-dir /usr/local/aws-cli --update
pre_build:
commands:
- echo No Pre Build phase
build: //更新前のバージョンを取得した上で、ユースカジノ コード更新を実行
commands:
- echo Build started on `date`
- CurrentVersion=$(echo $(aws lambda get-alias --function-name poc-lambda-cicd-lambda-01 --name prod | grep FunctionVersion | tail -1 |tr -cd 0-9))
- zip -r lambda.zip ./lambda_function.py
- aws lambda update-function-code --function-name poc-lambda-cicd-lambda-01 --zip-file fileb://lambda.zip
- sleep 10
post_build: //新バージョンを発行し、エイリアスに紐づいているバージョンを新バージョンに変更
commands:
- echo Build completed on `date`
- ls
- aws lambda publish-version --function-name poc-lambda-cicd-lambda-01 --description "update version"
- TargetVersion=$(echo $(aws lambda list-versions-by-function --function-name poc-lambda-cicd-lambda-01 | grep Version | tail -1 | tr -cd 0-9))
- echo $CurrentVersion
- echo $TargetVersion
- aws lambda update-alias --function-name poc-lambda-cicd-lambda-01 --name prod --function-version $TargetVersion
- aws lambda delete-function --function-name poc-lambda-cicd-lambda-01 --qualifier $CurrentVersion
CodeBuild のビルド仕様に関するリファレンス
https://docs.aws.amazon.com/ユースカジノ コード/codebuild/latest/userguide/build-spec-ref.html
lambda — AWS CLI 1.22.73 Command Reference
https://docs.aws.amazon.com/cli/latest/reference/lambda/index.html
8. デプロイするコードをユースカジノ コードする
デプロイするコードをユースカジノ コードし、lambda_funcation.py
として保存します。本書ではPython
を使用してユースカジノ コードしています。
def lambda_handler(event, context):
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {},
"body": '{"message": "Hello World!!"}',
}
9. ユースカジノ コード
ユースカジノ コード。push するファイルは以下の 2 つです。
.
├── buildspec.yml
└── lambda_function.py
1. ユースカジノ コードをローカルにクローンします。
$ git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/{repo_name}
2. buildspec.yml
とlambda_function.py
をローカルユースカジノ コードコピーします。
$ cp buildspec.yml local_repo_path
$ cp lambda_function.py local_repo_path
$ cd local_repo_path
3. ユースカジノ コードインデックスに追加します。
$ git add -A
4. ユースカジノ コードコミットします。
$ git commit -m "comment"
出力例
[master 3488038] 2022/03/15 14:27 Lambda修正
1 file changed, 1 insertion(+), 1 deletion(-)
5. 以下のコマンドを実行して ユースカジノ コード。
master
実行結果
初回実行結果
ユースカジノ コードした API をコールした結果は以下の通りです。
修正後リリース結果
コードをユースカジノ コード通り修正し、再度 push します。
def lambda_handler(event, context):
return {
"isBase64Encoded": False,
"statusCode": 200,
"headers": {},
"body": '{"message": "こんにちは、世界!!"}',
}
push すると、ユースカジノ コードが実行されます。
再度 API をユースカジノ コードルします。表示される文字列が更新され、Lambda が更新されたことが確認できます。
一方、ユースカジノ コード設定画面を見てみると、デプロイしたバージョンとエイリアスが紐づいていることが確認できます。
最後に
CodeCommit、CodeBuild、CodePipeline を使用して Lambda の CI/CD をユースカジノ コードすることができました。ポイントを改めてまとめます。
- Lambda でユースカジノ コードとバージョニングを有効にする
- API Gateway で Lambda を実行する際は、ユースカジノ コード
- CodBuildの
buildspec.yaml
内でaws cliを使用してLambda関数の更新をユースカジノ コード
CodeBuildのOS は Linux ですので、Linux でできることは大抵できます。そのため、buildspec.yml をいかに駆使するかで自由度が変わります。一方で、連携する AWS サービス間で変更が発生した際の影響を理解し、互いに干渉しない仕組みがあるかどうかの確認も必要です。
カジノゲームは、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。