Lambdaを別のAWSアカウントへ移行するときは、移行先に関数を作成し、コードと設定を再配置してから呼び出し元を切り替えます。ここで見落としやすいのが、コードのZIPをコピーしても、メモリやタイムアウトなどの設定までコピーされるわけではないという点です。
この記事ではZIP形式の関数を対象に、デプロイパッケージを使う方法とAWS SAMを使う方法を比較します。コンテナイメージ形式の関数は、ECRのイメージを使う別のデプロイ手順になります。
まず「コードだけ」か「設定も管理する」かを決める
| 方法 | 向いているケース | 移行時の作業 |
|---|---|---|
| ZIPをダウンロードして再配置 | 関数が少なく、設定を個別に確認できる | コードをアップロードし、関数設定や権限を別途設定する |
| AWS SAMで再デプロイ | 設定を記録し、繰り返し同じ構成を作りたい | テンプレートとコードを準備し、移行先に合わせて参照先を修正する |
どちらも「旧アカウントの関数をそのまま移動する」操作ではありません。移行先では関数ARNが変わるため、呼び出し元や周辺リソースとの接続まで確認して初めて移行が完了します。
方法1:ZIPを使ってコードを移す
Lambdaコンソールでは、関数コードのZIPとAWS SAMファイルをダウンロードできます。コンソールからのコードダウンロードは未発行の$LATESTが対象です。エイリアスが特定バージョンを指している本番環境では、取得したコードと実際に稼働しているコードが一致するかを先に確認します。操作はZIP形式のLambda関数の公式手順を参照してください。
- 移行対象のコード、ランタイム、アーキテクチャ、ハンドラーと設定を記録する。
- 移行元のコードZIPを取得する。
- 移行先アカウントに実行ロールと関数を作成し、対応するコードをアップロードする。
- メモリ、タイムアウト、環境変数、レイヤー、VPCなどを設定する。
- テストイベントで実行し、ログと処理結果を確認する。
この方法は作業の入口が簡単ですが、関数の数が増えると設定漏れを起こしやすくなります。ZIPの配置完了を移行完了とせず、旧環境との設定比較を作業に含めてください。
方法2:AWS SAMでコードと設定を再デプロイする
AWS SAMでは、AWS::Serverless::Functionにメモリやタイムアウトなどの設定を記述できます。テンプレートに含めた設定を移行先でも再現できるため、変更管理や再実行に向いています。既にSAMで管理しているなら、その管理元テンプレートを起点にします。
コンソールから取得したSAMファイルを使う場合も、内容を確認してから移行します。テンプレートに記載されていないリソースや外部の設定まで自動的に移るわけではありません。特に、旧アカウントの実行ロールARNやサブネットIDが残っていないかを確認します。
- SAMテンプレートと、テンプレートが参照するコードを用意する。
- 環境ごとに異なる値をパラメーター化し、移行先のリソースへ置き換える。
- 移行先アカウント・リージョンを確認して、SAM CLIでデプロイする。
- CloudFormationの変更セットと作成結果を確認する。
- 関数の実行結果に加えて、イベント連携と権限を確認する。
設定可能な項目はAWS::Serverless::Function、配置方法はSAMのデプロイ手順にまとまっています。
移行前後で照合したい設定
| 確認対象 | 確認する理由 |
|---|---|
| 実行ロール・アクセス先 | 新しい関数から必要なS3やDynamoDBなどへアクセスできるか確認する |
| 環境変数・秘密情報の参照先 | 旧環境のリソース名や接続先が残っていないか確認する |
| ランタイム・アーキテクチャ・レイヤー | コードと依存ライブラリの実行条件をそろえる |
| VPC・サブネット・セキュリティグループ | データベースや外部サービスへの通信経路を確認する |
| トリガー・イベントソースマッピング | 期待するイベントが新しい関数へ届くか確認する |
| ログ・アラーム・再試行時の処理 | 正常処理だけでなく、失敗を検知して回復できるか確認する |
環境変数は関数の設定です。扱いは環境変数の公式資料を確認してください。また、SQSやDynamoDB Streamsなどを使う場合は、イベントソースマッピングも移行対象として整理します。
本番切替は「新旧両方が動く時間」を設計する
新しい関数がテストに成功しても、旧関数をすぐに削除する必要はありません。先に呼び出し元の切替方法と戻し方を決めます。特に更新処理や通知処理では、新旧のトリガーを同時に有効化すると二重処理につながる可能性があります。
切替時には、旧側の起動条件を止めるタイミング、処理中イベントや滞留メッセージの扱い、新側の起動確認を順番に整理します。切替後はエラー数だけでなく、保存されたデータや通知先などの業務結果も確認します。問題があった場合にどこまで戻すかも、データ更新の有無に合わせて決めておきましょう。
