[アップデート] AWS Lambdaのトリガーとして異なるAWSアカウントのSQSキューが指定できるようになりました

こんにちは。サービスグループの武田です。AWS Lambda関数のトリガーとして指定できるSQSキューとして、新たに異なるアカウントのSQSキューを指定できるようになりました。
2021.10.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービスグループの武田です。

AWS Lambdaにアップデートがありました。これまでLambda関数のトリガーとして指定できるSQSキューは同一AWSアカウントに限られましたが、新たに異なるアカウントのSQSキューを指定できるようになりました。

それではさっそくやってみましょう。

やってみた

次の図のような構成を作っていきます。

アカウントAでSQSキューを作成する

まずはアカウントAでSQSキューを作成します。

キュー名はCrossAccountTriggerTestとしました。

アクセスポリシーでクロスアカウントアクセスを許可する必要があります。受信できるユーザーとしてアカウントBのAWSアカウントIDを指定します。またSQS:GetQueueAttributesは自動的に補完されないため、手動で追加しましょう。

作成できたらSQSキューのARNを控えておきましょう。

アカウントBでLambda関数を作成する

続いてアカウントBでLambda関数を作成します。

デフォルトで用意されているHello World関数をデプロイします。関数名はhelloWorldとしました。

処理をレスポンスを返すのではなく、単にログにメッセージを出すように変更します。

デフォルトのIAMロールでは権限不足のため、Lambda関数に紐づいているIAMロールにSQSへアクセスするための権限を追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sqs:DeleteMessage",
                "sqs:ReceiveMessage",
                "sqs:GetQueueAttributes"
            ],
            "Resource": "arn:aws:sqs:ap-northeast-1:123456789012:CrossAccountTriggerTest"
        }
    ]
}

設定メニューからトリガーを追加します。

トリガーとしてSQSを選択し、SQSキューとして先ほど控えたキューのARNを入力します。

アカウントAのSQSキューにメッセージを送信してみる

準備完了です。アカウントAのSQSキューにメッセージを送信して動作確認をしてみましょう。

適当なメッセージを2回ほど送信します。

アカウントBのCloudWatch Logsを確認すると、ログが出力されていました!

まとめ

Lambda関数が別アカウントのSQSキューをトリガーとして指定できるようになりました。マルチアカウント運用をしているシステムはより簡素になるのではないでしょうか。ぜひ現在のシステムを見直してみてください。