AWS SAM ファイルを使用して Lambda 関数を別の AWS アカウントまたはリージョンに移行するにはどうすればよいですか?

最終更新日: 2021 年 2 月 3 日

AWS Lambda 関数を別の AWS アカウント (または AWS リージョン) に移動する必要があります。これを AWS サーバーレスアプリケーションモデル (AWS SAM) ファイルを使用して行うにはどうすればよいですか?

簡単な説明

AWS SAM ファイルを使用して Lambda 関数を別の AWS アカウントまたはリージョンに移行するには、次の手順を実行します。

1.    Lambda 関数の AWS SAM ファイルとそのデプロイパッケージをダウンロードします。

2.     関数の移行先の AWS リージョンの Amazon Simple Storage Service (Amazon S3) バケットに Lambda 関数のデプロイパッケージをアップロードします。

3.    AWS SAM ファイルと AWS CloudFormation を使用して、別の AWS アカウントまたはリージョンで新しい Lambda 関数をデプロイおよび管理します。

詳細については、「Hello World アプリケーションのデプロイ」を参照してください。

注意: Lambda コンソールまたは AWS Command Line Interface (AWS CLI) を使用して Lambda 関数を移行することもできます。

解決方法

Lambda 関数の AWS SAM ファイルとそのデプロイパッケージをダウンロードする

1.    Lambda コンソールの左側のパネルで [関数] を選択します。

2.    移行する Lambda 関数の名前を選択します。

3.    Lambda 関数ウィンドウで [アクション] を選択し、[関数のエクスポート] を選択します。

4.    [関数のエクスポート] ウィンドウで、[ AWS SAM ファイルのダウンロード ] を選択します。

5.    AWS SAM ファイルをダウンロードしたら、[関数のエクスポート] ウィンドウに戻り、[デプロイパッケージのダウンロード] を選択してデプロイパッケージをダウンロードします。

関数の移行先の AWS リージョンにある Amazon S3 バケットに Lambda 関数のデプロイパッケージをアップロードする

1.    Lambda 関数の移行先の AWS アカウントを使用して Amazon S3 コンソールにサインインします。

2.    [ バケット] リストで、ファイルのアップロード先の S3 バケットの名前を選択します。

3.    [アップロード] を選択します。

4.    [アップロード] ページで、[ファイルの追加] を選択します。

5.    ダウンロードした Lambda 関数のデプロイパッケージを選択します。次に、[開く] を選択します。

6.    [アップロード] を選択します。

7.    [ファイルとフォルダ] を選択し、デプロイパッケージのファイル名を選択して開きます。

8.    ファイルの [オブジェクトの概要] セクションで、デプロイパッケージの S3 パスの場所である S3 URI の値をメモします。次のステップで使用するために値を保存します。

AWS SAM ファイルと AWS CloudFormation を使用して、別の AWS アカウントまたはリージョンで新しい Lambda 関数をデプロイおよび管理する

1.    ダウンロードした Lambda 関数 AWS SAM ファイルを開きます。

Lambda 関数の AWS SAM ファイルコードの例

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: An AWS Serverless Specification template describing your function.
Resources:
  MyLambdaFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: lambda_function.lambda_handler
      Runtime: python3.6
      CodeUri: .                #S3 bucket Link
      Description: ''
      MemorySize: 128
      Timeout: 6
      Role: 'arn:aws:iam::733097455070:role/service-role/FirstLambdaPolicy'    #Replace
      Environment:
        Variables:
          homelocation: .tmp
      Tags:
        sampleTag: test
      Tracing: Active

2.    CodeUri の後にあるドット (.)を前のステップで取得した Lambda デプロイパッケージの S3 パスの場所で置き換えます。

重要: CloudFormation スタックを作成する IAM ユーザーが、この S3 オブジェクトに対する's3:GetObject' アクセス許可を持っていることを確認してください。

3.    関数を別の AWS アカウントに移行するには、次の手順を実行します。
Role: の値で、既存の IAM ロール ARN を削除します。次に、2 番目の AWS アカウントで、値を IAM ロール ARN に置き換えます。
レイヤーを含む関数の場合、2 番目の AWS アカウントが最初のアカウントのレイヤーを使用するアクセス許可をそのレイヤーで追加します。または、AWS SAM ファイルの Lambda レイヤー ARN を 2 番目の AWS アカウントの Lambda レイヤー ARN に置き換えます。

- または -

関数を別の AWS リージョンに移行するには、次の手順を実行します。
Role: の値は、既存の IAM ロール ARN を引き続き使用します。
レイヤーを含む関数の場合、Lambda レイヤー ARN を 2 番目の AWS リージョンの Lambda レイヤー ARN で置き換えます。

重要: 仮想プライベートクラウド (VPC) の関数の場合、SecurityGroupdIdsSubnetIds の値を 2 番目の AWS アカウントまたはリージョンのリソースで置き換えます。

4.    イベントソースを含む関数の場合、2 番目の AWS アカウントまたはリージョンでイベントソースを再作成するコードを AWS SAM ファイルから削除します。次に、Events: の後の値を 2 番目の AWS アカウントまたはリージョンのイベントソースで置き換えます。

5.    編集した AWS SAM ファイルを使用して、関数の移行先である 2 番目の AWS アカウントまたはリージョンに AWS CloudFormation スタックを作成します。

注意: AWS CloudFormation スタックを作成すると、移行した Lambda 関数が Lambda コンソールに表示されます。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?