TOPコラム一覧Lambda の CI/ユースカジノ コード

Lambda の CI/ユースカジノ コード

はじめに

こんにちは、佐藤です。
皆さん、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. 1. Lambda関数 をユースカジノ コードする
  2. 2. API Gateway をユースカジノ コードする
  3. 3. WAF で WebACL をユースカジノ コードする
  4. 4. CodeCommit でレポジトリをユースカジノ コードする
  5. 5. CodeBuild でビルドプロジェクトをユースカジノ コードする
  6. 6. CodePipeline でパイプラインをユースカジノ コードする
  7. 7. buildspec.yml をユースカジノ コードする
  8. 8. デプロイするコードをユースカジノ コードする
  9. 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 を保護する

https://docs.aws.amazon.com/ユースカジノ コード/apigateway/latest/developerguide/apigateway-control-access-aws-waf.html

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.ymllambda_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のビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にお問い合わせください。

お問い合わせ

【著者プロフィール】

佐藤 和希(さとう かずき)

伊藤忠テクノソリューションズ株式会社 クラウドアーキテクト

AWS上でユースカジノ コードされるクラウドネイティブなシステムの開発プロジェクトに従事。 エンタープライズ向けクラウドネイティブ案件のプリセールス並びにプロジェクトにおけるクラウドアーキテクトとして活躍中。

佐藤 和希(さとう かずき)

TOPコラム一覧Lambda の CI/ユースカジノ コード

pagetop