AWS Lambda 関数を、1 つの AWS アカウントまたは AWS リージョンから別の AWS アカウントまたはリージョンに移行する必要があります。
簡単な説明
Lambda 関数を別の AWS アカウントまたはリージョンに移行するには、AWS サーパーレスアプリケーションモデル (AWS SAM) ファイルを使用します。
- Lambda 関数の AWS SAM ファイルとそのデプロイパッケージをダウンロードします。
- Lambda 関数のデプロイパッケージを、関数の移行先のリージョンの Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。
- AWS SAM ファイルと AWS CloudFormation を使用して、別の AWS アカウントまたはリージョンに新しい Lambda 関数をデプロイして管理します。
詳細については、「Hello World アプリケーションのデプロイ」を参照してください。
**注:**Lambda 関数は、Lambda コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) で移行することもできます。
解決策
Lambda 関数 AWS SAM ファイルとそのデプロイパッケージをダウンロードします。
- Lambda コンソールの左側にあるパネルで [関数] を選択します。
- 移行する Lambda 関数の名前を選択します。
- Lambda 関数ウィンドウで [アクション] を選択し、[関数のエクスポート] を選択します。
- [関数のエクスポート] ウィンドウで、[AWS SAM ファイルのダウンロード] を選択します。
- AWS SAM ファイルがダウンロードされたら、[関数のエクスポート] ウィンドウに戻り、[デプロイパッケージのダウンロード] を選択してデプロイパッケージをダウンロードします。
Lambda 関数のデプロイパッケージを、関数の移行先の AWS リージョンにある Amazon S3 バケットにアップロードします。
- Lambda 関数の移行先の AWS アカウントを使用して、 Amazon S3 コンソールにサインインします。
- バケットリストで、ファイルをアップロードする S3 バケットの名前を選択します。
- [アップロード] を選択します。
- [アップロード] ページで、[ファイルを追加] を選択します。
- ダウンロードした Lambda 関数のデプロイパッケージを選択します。次に、[開く] を選択します。
- [アップロード] を選択します。
- [ファイルとフォルダ] を選択します。デプロイパッケージを開くには、デプロイパッケージのファイル名を選択します。
- ファイルの [オブジェクト概要] セクションで、S3 URIの値を書き留めます。これはデプロイパッケージの S3 パスの場所です。次のステップで使用できるように値を保存します。
AWS SAM ファイルと AWS CloudFormation を使用して、別の AWS アカウントまたはリージョンに新しい Lambda 関数をデプロイして管理します。
-
ダウンロードした 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
-
CodeUri の後に、ドット (.) を前のステップで取得した Lambda デプロイパッケージの S3 パスの場所に置き換えます。
重要:CloudFormation スタックを作成する AWS Identity and Access Management (IAM) ユーザーに、この S3 オブジェクトに対する's3:GetObject' 権限があることを確認してください。
-
関数を別の AWS アカウントに移行:
ロール: 値については、既存の IAM ロール ARN を削除します。次に、値を 2 番目の AWS アカウントの IAM ロール ARN に置き換えます。
レイヤーのある関数の場合は、レイヤーが最初のアカウントのレイヤーを使用することを許可する 2 番目の AWS アカウントのレイヤーに権限を追加します。または、AWS SAM ファイル内の Lambda レイヤー ARN を 2 番目の AWS アカウントの Lambda レイヤー ARN に置き換えます。
-または-
関数を別のリージョンに移行:
ロール: 値には、引き続き既存の IAM ロール ARN を使用してください。
レイヤーのある関数の場合は、Lambda レイヤー ARN を 2 番目の AWS リージョンの Lambda レイヤーの ARN に置き換えます。
**重要:**仮想プライベートクラウド (VPC) 内の関数の場合は、SecurityGroupdIds と SubnetIds の値を 2 番目の AWS アカウントまたはリージョンのリソースに置き換えます。
-
イベントソースを使用する関数の場合、イベントソース設定は Lambda 関数からダウンロードされた AWS SAM ファイルの一部としてエクスポートされません。元のイベントソースを 2 番目のアカウントまたはリージョンのリソース値と一致させるには、「"events"プロパティの構文」を参照してください。次に、2 番目の AWS アカウントまたはリージョンの AWS SAM ファイルにイベントを追加します。
-
編集した AWS SAM ファイルを使用して、関数の移行先となる 2 番目の AWS アカウントまたはリージョンに AWS CloudFormation スタックを作成します。
**注:**AWS CloudFormation スタックを作成すると、移行された Lambda 関数が Lambda コンソールに表示されます。