0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambdaが異なるAWSアカウントのコンテナイメージを利用できるようになりました。

Posted at

はじめに

今回は以下のアップデートを見てみます。

Lambdaがコンテナイメージを異なるAWSアカウントのAmazon ECRから使えるようになりました。

これまではLambda関数と同じアカウントのECRにイメージを置く必要がありましたが、今回のアップデートによりアカウントを跨いでイメージを利用できるようになった模様。

早速やってみます!

手順は以下です。

  1. 任意のコンテナイメージの作成
  2. ECRリポジトリの作成、プッシュ
  3. ECRリポジトリの許可設定
  4. 別アカウントでLambda関数の設定

1. 任意のコンテナイメージの作成

今回はPythonで適当な応答を返すコードを利用しました。

dockerfileはLambda専用の書き方で作成します。

あとはcross-account-ecr-lambdaの名前でコンテナイメージをビルドしておきます。

# コンテナイメージのビルド
docker build --provenance=false --platform linux/amd64 -t cross-account-ecr-lambda .

なお、今回はMacBookを使っているので、--provenance=false --platform linux/amd64のオプションを指定してします。

ここらは以下で紹介していますので参考にしてみてください!

2. ECRリポジトリの作成、プッシュ

次に以下のコマンドで、ECRのリポジトリを作成したり、先程ビルドしたコンテナイメージをプッシュします。

# ECRリポジトリ作成
aws ecr create-repository --repository-name cross-account-ecr-lambda

# ECRにログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com

# タグ付け
docker tag cross-account-ecr-lambda:latest <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/cross-account-ecr-lambda:latest

# プッシュ
docker push <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/cross-account-ecr-lambda:latest

3. ECRリポジトリの許可設定

ここからクロスアカウント用の設定を実施していきます。

マネコンから先ほど作った、リポジトリのPermissionsを選択し、編集->ポリシーJSONの編集にてポリシーの設定を行います。

スクリーンショット 2025-09-20 5.15.00.png

スクリーンショット 2025-09-20 5.15.52.png

設定するポリシーは以下です。

差分の箇所で、Lambdaを作成するアカウントおよび、Lambda自身に許可を付与します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "CrossAccountPermission",
      "Effect": "Allow",
      "Principal": {
+        "AWS": "arn:aws:iam:: <Lambdaを作成する側のaccount-id>:root"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ]
    },
    {
      "Sid": "LambdaECRImageCrossAccountRetrievalPolicy",
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": [
        "ecr:BatchGetImage",
        "ecr:GetDownloadUrlForLayer"
      ],
      "Condition": {
        "StringLike": {
+          "aws:sourceArn": "arn:aws:lambda:ap-northeast-1: <Lambdaを作成する側のaccount-id>:function:*"
        }
      }
    }
  ]
}

ポリシーが間違ってなければ、確認画面が出るので保存を選択して完了。

image.png

4. 別アカウントでLambda関数の設定

ここまでで設定はできたので、先ほど作ったコンテナイメージを使って、別アカウントでLambdaを作成してみます。

コンテナイメージURIは <account-id>.dkr.ecr.ap-northeast-1.amazonaws.com/cross-account-ecr-lambda:latestになります。

スクリーンショット 2025-09-20 5.20.26.png

無事作成できたらテストしてみて、きちんと応答が返っていることが確認できました!

image.png

最後に

クロスアカウントでコンテナイメージの運用がかなり楽になりそうなアップデートでした!

コンテナを使ったLambdaって実際どれくらい使われてるんだろう・・・?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?