Lambda 機能の更新を AWS にデプロイする

robotsnoindex
robotsnoindex
robotsnoindex
robotsnoindex

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

Prerequisites

以下が必要です。

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

  • 既存の Lambda 関数。

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

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

We recommend attaching the AWSLambdaFullAccess policy to the IAM user, to full permissions to work with Lambda functions.

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
    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
- 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}'
最終更新日 2020 年 6 月 24 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.