

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# さまざまな AWS リージョンの S3 バケットからのイベント通知に Lambda 関数をサブスクライブする
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions"></a>

*Amazon Web Services、Suresh Konathala*

*Andrew Preston、Arindom Sarkar (所属なし)*

## 概要
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-summary"></a>

[Amazon Simple Storage Service (Amazon S3) イベント通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/NotificationHowTo.html)は、S3 バケット内の特定のイベント (オブジェクト作成イベント、オブジェクト削除イベント、オブジェクト復元イベントなど) の通知を発行します。AWS Lambda 関数を使用して、アプリケーションの要件に従ってこれらの通知を処理できます。ただし、Lambda 関数は、さまざまな AWS リージョンでホストされている S3 バケットからの通知を直接サブスクライブすることはできません。

このパターンのアプローチでは、各リージョンの Amazon Simple Notiﬁcation Service (Amazon SNS) トピックを使用して、クロスリージョン S3 バケットからの Amazon S3 通知を処理する[ファンアウトシナリオ](https://docs.aws.amazon.com/sns/latest/dg/sns-common-scenarios.html)をデプロイします。これらのリージョン SNS トピックは、Lambda 関数も含む中央リージョンの Amazon Simple Queue Service (Amazon SQS) キューに、Amazon S3 イベント通知を送信します。Lambda 関数はこの SQS キューにサブスクライブし、組織の要件に従ってイベント通知を処理します。

## 前提条件と制限事項
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-prereqs"></a>

**前提条件**
+ アクティブな AWS アカウント。
+ Amazon SQS キューと Lambda 関数をホストする中央リージョンを含む、複数のリージョンにある既存の S3 バケット。
+ AWS コマンドラインインターフェイス (AWS CLI) がインストール済みおよび設定済み。詳細については、AWS CLI ドキュメントの「[ CLI バージョン 2 のインストール、更新、およびアンインストール](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)」を参照してください。 
+ Amazon SNS のファンアウトシナリオに精通していること。Amazon SNS のトピック作成の詳細については、「[Amazon SNS のドキュメント](https://docs.aws.amazon.com/sns/latest/dg/sns-common-scenarios.html)」を参照してください。

## アーキテクチャ
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-architecture"></a>

次の図は、このパターンのアプローチのアーキテクチャを示しています。 

![\[ワークフローは Amazon SNS、S3、SQS を使用して、クロスリージョン S3 バケットからのイベント通知を処理します。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/cf6c1804-8c41-46f1-9f17-ff361708c595/images/760cf4c0-0cb3-48d1-92ae-1cf0fa8ae076.png)


この図表は、次のワークフローを示しています:

1. Amazon S3 は、S3 バケットに関するイベント通知 (オブジェクトの作成、削除、復元など) を同じリージョンの SNS トピックに送信します。

1. SNS トピックは、中央リージョンの SQS キューにイベントを発行します。

1. SQS キューは Lambda 関数のイベントソースとして構成され、Lambda 関数のイベントメッセージをバッファします。 

1. Lambda 関数は SQS キューにメッセージがないかポーリングし、アプリケーションの要件に従って Amazon S3 イベント通知を処理します。

 

**テクノロジースタック**
+ Lambda
+ Amazon SNS
+ Amazon SQS
+ Amazon S3

## ツール
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-tools"></a>
+ [ CLI ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)- AWS コマンドラインインターフェイス (AWS CLI) はオープンソースのツールで、コマンドラインシェルのコマンドで AWS サービスとインタラクトします。最小限の構成で、コマンドプロンプトからブラウザベースの AWS マネジメントコンソールで提供される機能と同等の機能を実装する AWS CLI コマンドを実行できます。
+ 「[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)」 を使用することで、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体でライフサイクルの最初から最後までリソースを管理できます。リソースを個別に管理する代わりに、テンプレートを使用してリソースとその依存関係を記述し、それらをスタックとしてまとめて起動して設定できます。複数の AWS アカウントと AWS リージョンにまたがるスタックを管理し、プロビジョニングすることが可能です。
+ 「[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)」 – AWS Lambda はサーバーのプロビジョニングや管理を行わずにコードの実行を支援できるコンピューティングサービスです。Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケールします。課金は実際に消費したコンピューティング時間に対してのみ発生します。コードが実行されていない場合、料金は発生しません。
+ [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) — Amazon Simple Notiﬁcation Service (Amazon SNS) は、ウェブサーバーや E メールアドレスなど、パブリッシャーとクライアント間のメッセージ配信や送信を調整および管理します。サブスクライバーは、サブスクライブしているトピックに対して発行されたすべてのメッセージを受信します。また、同じトピックのサブスクライバーはすべて同じメッセージを受信します。
+ [Amazon SQS ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)– Amazon Simple Queue Service (Amazon SQS) は、配信ソフトウェアシステムとコンポーネントを統合および分離できる、安全で耐久性があり、利用可能なホスト型キューを提供します。Amazon SQSは、スタンダードおよび FIFO キューの両方をサポートしています。

## エピック
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-epics"></a>

### 中央リージョンに SQS キューと Lambda 関数を作成する
<a name="create-the-sqs-queue-and-lambda-function-in-your-central-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Lambda トリガーを使用して SQS キューを作成する。 | AWS マネジメントコンソールにサインインし、AWS Lambda ドキュメントの「[Amazon SQS で Lambda を使用する](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs-example.html)」チュートリアルの手順に従って、中央リージョンに次のリソースを作成します。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions.html)Lambda 関数のイベントソースとして SQS キューを構成するようにしてください。 | AWS DevOps、クラウドアーキテクト | 

### SNS トピックを作成し、必要な各リージョンの S3 バケットのイベント通知を設定する
<a name="create-an-sns-topic-and-set-up-event-notifications-for-the-s3-buckets-in-each-required-region"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  Amazon S3 イベント通知を受信する SNS トピックを作成します。 | Amazon S3 イベント通知を受信したいリージョンに SNS トピックを作成します。Amazon SNS のトピック作成の詳細については、Amazon SNS のドキュメントの「[SNS トピックを作成する](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)」を参照してください。 SNS トピックの Amazon リソースネーム (ARN) を必ず記録してください。  | AWS DevOps、クラウドアーキテクト | 
| 中央 SQS キューにSNSトピックをサブスクライブします。 | 中央リージョンがホストする SQS キューに SNS トピックをサブスクライブします。これに関する詳細については、Amazon SNS ドキュメントの「[SNS トピックにサブスクライブする](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html)」を参照してください。 | AWS DevOps、クラウドアーキテクト | 
| SNS トピックのアクセスポリシーを更新する。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions.html)<pre>{<br />  "Version": "2012-10-17",		 	 	 <br />  "Statement": [<br />    {<br />      "Sid": "0",<br />      "Effect": "Allow",<br />      "Principal": {<br />        "Service": "s3.amazonaws.com"<br />      },<br />      "Action": "sns:Publish",<br />      "Resource": "arn:aws:sns:us-west-2::s3Events-SNSTopic-us-west-2"<br />    }<br />  ]<br />}</pre> | AWS DevOps、クラウドアーキテクト | 
| リージョンの各 S3 バケットに通知を設定します。 | リージョンの各 S3 バケットにイベント通知を設定します。これに関する詳細については、Amazon S3 ドキュメントの「[Amazon S3 コンソールを使用したイベント通知の有効化と構成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-event-notifications.html)」を参照してください。**[送信先]** セクションで **[SNS トピック]** を選択し、先に作成した SNS トピックの ARN を指定します。 | AWS DevOps、クラウドアーキテクト | 
| 必要なすべてのリージョンについてこのエピックを繰り返します。 | 中央リージョンを含め、Amazon S3 イベント通知を受信したいリージョンごとに、このエピックのタスクを繰り返してください。 | AWS DevOps、クラウドアーキテクト | 

## 関連リソース
<a name="subscribe-a-lambda-function-to-event-notifications-from-s3-buckets-in-different-aws-regions-resources"></a>
+ [アクセスポリシーの構成](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-add-permissions.html) (Amazon SQS ドキュメント)
+ [SQS キューをイベントソースとして構成する](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html#events-sqs-eventsource) (AWS Lambda ドキュメント)
+ [Lambda 関数を開始するための SQS キューの構成](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-lambda-function-trigger.html) (Amazon SQS ドキュメント)
+ [AWS::Lambda::Function リソース](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-function.html) (AWS CloudFormation ドキュメント)