翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon VPC から Amazon SNS メッセージを発行する
このセクションでは、プライベートネットワークでメッセージを安全に保ちながら、Amazon SNS トピックに発行する方法について説明します。Amazon Virtual Private Cloud (Amazon VPC) でホストされている Amazon EC2 インスタンスからメッセージを発行します。メッセージは、パブリックインターネットを経由せずに AWS ネットワーク内に留まります。VPC からプライベートにメッセージを発行することにより、アプリケーションと Amazon SNS 間のトラフィックのセキュリティを強化できます。このセキュリティは、顧客に関する個人を特定できる情報 (PII) を公開する場合や、アプリケーションが市場規制の対象となる場合に重要になります。例えば、プライベートな発行は、Health Insurance Portability and Accountability Act (HIPAA) に準拠する必要があるヘルスケアシステムや、Payment Card Industry Data Security Standard (PCI DSS) に準拠する必要がある財務システムがある場合に役立ちます。
一般的なステップは次のとおりです。
-
AWS CloudFormation テンプレートを使用して、 に一時的なプライベートネットワークを自動的に作成します AWS アカウント。
-
VPC を Amazon SNS に接続する VPC エンドポイントを作成します。
-
Amazon EC2 インスタンスにログインし、Amazon SNS トピックに対してプライベートにメッセージを発行します。
-
メッセージが正常に配信されたことを確認します。
-
このプロセス中に作成したリソースを削除して、 に残らないようにします AWS アカウント。
次の図は、これらのステップを完了する際に AWS アカウントで作成するプライベートネットワークを示しています。

このネットワークは、Amazon EC2 インスタンスを含む VPC で構成されます。インスタンスは、インターフェイス VPC エンドポイントを介して Amazon SNS に接続します。このタイプのエンドポイントは、 AWS PrivateLink を使用するサービスに接続します。この接続が確立されたら、ネットワークがパブリックインターネットから切断されている場合でも、Amazon EC2 インスタンスにログインして Amazon SNS トピックにメッセージを発行できます。トピックは、受信したメッセージを 2 つのサブスクライブ AWS Lambda 関数にファンアウトします。これらの関数は、受け取ったメッセージを Amazon CloudWatch Logs に記録します。
このステップの完了には 20 分ほどかかります。
トピック
[開始する前に]
開始する前に、Amazon Web Services (AWS) アカウントが必要です。サインアップすると、Amazon SNS や Amazon VPC など AWS、 のすべてのサービスにアカウントが自動的にサインアップされます。アカウントをまだ作成していない場合は、https://aws.amazon.com/
ステップ 1: Amazon EC2 キーペアを作成する
Amazon EC2 インスタンスへのログインには、キーペアが使用されます。これは、ログイン情報の暗号化に使用されるパブリックキーと、その復号に使用されるプライベートキーで構成されます。キーペアを作成するときは、プライベートキーのコピーをダウンロードします。後で、キーペアを使用して Amazon EC2 インスタンスにログインします。ログインするには、キーペアの名前を指定し、プライベートキーを指定します。
キーペアを作成するには
にサインイン AWS Management Console し、https://console.aws.amazon.com/ec2/
で Amazon EC2 コンソールを開きます。 -
左のナビゲーションメニューで、[ネットワーク & セキュリティ] セクションを見つけます。次に、[キーペア] を選択します。
-
[キーペアの作成] を選択します。
-
[キーペアの作成] ウィンドウで、[キーペア名] に「
VPCE-Tutorial-KeyPair
」と入力します。続いて、[作成] を選択します。 -
ブラウザによってプライベートキーファイルが自動的にダウンロードされます。これを安全な場所に保存します。Amazon EC2 により、ファイルに拡張子
.pem
が付けられます。 -
(オプション) Mac または Linux コンピュータで SSH クライアントを使用してインスタンスに接続している場合は、
chmod
コマンドを使用してプライベートキーファイルの権限を設定すると、お客様のみがそれを読み取ることができます。-
ターミナルを開き、プライベートキーを含むディレクトリに移動します。
$
cd /
filepath_to_private_key
/ -
次のコマンドを使用してアクセス権限を設定します。
$
chmod 400 VPCE-Tutorial-KeyPair.pem
-
ステップ 2: AWS リソースを作成する
インフラストラクチャを設定するには、 AWS CloudFormation テンプレートを使用します。テンプレートは、Amazon EC2 インスタンスや Amazon SNS トピックなどの AWS リソースを構築するための設計図として機能するファイルです。このプロセスのテンプレートは GitHub で提供されていて、ダウンロードできます。
テンプレートを に提供し AWS CloudFormation、 でスタックとして必要なリソースを AWS CloudFormation プロビジョニングします AWS アカウント。スタックは、単一のユニットとして管理できるリソースのコレクションです。これらのステップを完了すると、 AWS CloudFormation を使用してスタック内のすべてのリソースを一度に削除できます。これらのリソースは AWS アカウント、必要でない限り に残りません。
このプロセスのスタックには、次のリソースが含まれます。
-
VPC および関連するネットワーキングリソース (サブネット、セキュリティグループ、インターネットゲートウェイ、およびルートテーブルを含む)。
-
VPC 内のサブネットに起動された Amazon EC2 インスタンス。
-
Amazon SNS トピック
-
2 つの AWS Lambda 関数。これらの関数は、Amazon SNS トピックに発行されたメッセージを受け取り、CloudWatch Logs にイベントを記録します。
-
Amazon CloudWatch メトリクスおよびログ
-
Amazon EC2 インスタンスに Amazon SNSの使用を許可する IAM ロール、および CloudWatch Logs への書き込みを Lambda 関数に許可する IAM ロール。
AWS リソースを作成するには
-
GitHub ウェブサイトからテンプレート ファイル
をダウンロードします。 -
AWS CloudFormation コンソール
にサインインします。 -
[スタックの作成] を選択します。
-
[テンプレートの選択] ページで、[テンプレートを Amazon S3 にアップロード] を選択してから、ファイルを選択して [次へ] をクリックします。
-
[詳細の指定] ページで、スタック名とキー名を指定します。
-
[スタックの名前] に
VPCE-Tutorial-Stack
を入力します。 -
[KeyName] で、[VPCE-Tutorial-KeyPair] を選択します。
-
[SSHLocation] で、デフォルト値の
0.0.0.0/0
のままにします。 -
[Next (次へ)] を選択します。
-
-
[オプション] ページで、すべてのデフォルト値を受け入れ、[次へ] を選択します。
-
[確認] ページで、スタックの詳細を確認します。
-
機能 で、 がカスタム名で IAM リソースを作成する AWS CloudFormation 場合があることを確認します。
-
[Create] (作成) を選択します。
AWS CloudFormation コンソールで スタックページが開きます。VPCE-Tutorial-Stack のステータスは CREATE_IN_PROGRESS です。数分後に作成プロセスが完了し、ステータスが CREATE_COMPLETE に変わります。
ヒント
[更新] ボタンを選択して、スタックの最新のステータスを表示します。
ステップ 3: Amazon EC2 インスタンスにインターネットアクセスがないことを確認する
前のステップの VPC で起動された Amazon EC2 インスタンスにはインターネットアクセスがありません。アウトバウンドトラフィックが禁止されているため、Amazon SNS にメッセージを発行することができません。インスタンスにログインしてこれを確認します。次に、パブリックエンドポイントへの接続と、Amazon SNS へのメッセージの発行を試みます。
この時点では、発行の試みは失敗します。後のステップで、Amazon SNS の VPC エンドポイントを作成すると、発行の試みは成功します。
Amazon EC2 インスタンスに接続します。
-
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
左のナビゲーションメニューで、[インスタンス] セクションを見つけます。続いて、[インスタンス] を選択します。
-
インスタンスの一覧で、[VPCE-Tutorial-EC2Instance] を選択します。
-
[Public DNS (IPv4)] カラムに示されたホスト名をコピーします。
-
ターミナルを開きます。キーペアが含まれているディレクトリから、以下のコマンドを使用してインスタンスに接続します。ここで、
instance-hostname
は、Amazon EC2 コンソールからコピーしたホスト名です。$
ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@
instance-hostname
インスタンスがインターネットに接続されていないことを確認するには
-
ターミナルで、amazon.com など任意のパブリックエンドポイントへの接続を試します。
$
ping amazon.com
接続の試行が失敗するため、いつでもキャンセルできます (Windows では Ctrl + C、macOS では Command + C)。
インスタンスが Amazon SNS に接続されていないことを確認するには
-
Amazon SNS コンソール
にサインインします。 -
左側のナビゲーションメニューで、[トピック] を選択します。
-
[トピック] ページで、トピック [VPCE-Tutorial-Topic] の Amazon リソースネーム (ARN) をコピーします。
-
ターミナルで、トピックへのメッセージを発行を試みます。
$
aws sns publish --region
aws-region
--topic-arnsns-topic-arn
--message "Hello"発行の試みが失敗するため、いつでもキャンセルできます。
ステップ 4: Amazon SNSの Amazon VPC エンドポイントを作成する
VPC を Amazon SNS に接続するには、インターフェイス VPC エンドポイントを定義します。エンドポイントを追加したら、VPC の Amazon EC2 インスタンスにログインし、そこから Amazon SNS API を使用できます。トピックにメッセージを発行でき、メッセージはプライベートに発行されます。 AWS ネットワーク内にとどまり、パブリックインターネットは移動しません。
注記
インスタンスは、インターネット上の他の AWS サービスやエンドポイントにアクセスできません。
エンドポイントを作成するには
-
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 -
左側のナビゲーションメニューで、[エンドポイント] を選択します。
-
[エンドポイントの作成] を選択します。
-
[エンドポイントの作成] ページの [サービスカテゴリ] で、デフォルトの選択である [AWS サービス] をそのままにします。
-
[サービス名] で、Amazon SNS のサービス名を選択します。
このサービス名は、選択したリージョンによって異なります。例えば、米国東部 (バージニア北部) を選択した場合、サービス名は com.amazonaws.
us-east-1
.snsになります。 -
[VPC] で、[VPCE-Tutorial-VPC] と言う名前の VPC を選択します。
-
[サブネット] で、サブネット ID に VPCE-Tutorial-Subnet を持つサブネットを選択します。
-
[プライベート DNS 名を有効にする] で、[このエンドポイントで有効にする] を選択します。
-
[セキュリティグループ] で、[セキュリティグループの選択] を選択し、[VPCE-Tutorial-SecurityGroup] を選択します。
-
[エンドポイントの作成] を選択します。Amazon VPC コンソールで、VPC エンドポイントが作成されたことが確認されます。
-
[閉じる] を選択します。
Amazon VPC コンソールの [エンドポイント] ページを開きます。新しいエンドポイントのステータスは [保留中] です。数分で、作成プロセスが完了すると、ステータスが [利用可能] に変わります。
ステップ 5: Amazon SNS トピックにメッセージを発行する
これで VPC に Amazon SNS のエンドポイントが含まれたので、Amazon EC2 インスタンスにログインし、トピックにメッセージを発行できます。
メッセージを発行するには
-
ターミナルが Amazon EC2 インスタンスに接続されていない場合は、再度接続します。
$
ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@
instance-hostname
-
以前の手順と同じコマンドを実行して、Amazon SNS トピックにメッセージを発行します。今回は、発行の試みが成功すると、Amazon SNS はメッセージ ID を返します。
$
aws sns publish --region
aws-region
--topic-arnsns-topic-arn
--message "Hello"{ "MessageId": "5b111270-d169-5be6-9042-410dfc9e86de" }
ステップ 6: メッセージの配信を確認する
Amazon SNS トピックがメッセージを受け取ると、2 つの Lambda サブスクライブ関数に送信して、メッセージをファンアウトします。これらの関数がメッセージを受け取ると、イベントを CloudWatch Logs に記録します。メッセージの配信が成功したことを確認するには、関数が呼び出されたこと、および CloudWatch Logs が更新されたことを確認します。
Lambda 関数が呼び出されたことを確認するには
-
https://console.aws.amazon.com/lambda/
で AWS Lambda コンソールを開きます。 -
[関数] ページで、[VPCE-Tutorial-Lambda-1] を選択します。
-
[モニタリング] を選択します。
-
[呼び出しカウント] グラフを確認します。このグラフには、Lambda 関数が実行された回数が表示されます。
呼び出しカウントは、トピックにメッセージを発行した回数に一致します。
CloudWatch Logs が更新されたことを確認するには
-
CloudWatch コンソール (https://console.aws.amazon.com/cloudwatch/
) を開きます。 -
左側のナビゲーションメニューで [ログ] を選択します。
-
Lambda 関数によって書き込まれたログを確認します。
-
[/aws/lambda/VPCE-Tutorial-Lambda-1/] ロググループを選択します。
-
ログストリームを選択します。
-
ログにエントリ
From SNS: Hello
が含まれていることを確認します。 -
コンソール上部の [ロググループ] を選択して、[ロググループ] ページを表示します。次に、/aws/lambda/VPCE-Tutorial-Lambda-2/ ロググループに対して前のステップを繰り返します。
-
お疲れ様でした。Amazon SNS のエンドポイントを VPC に追加することにより、VPC で管理されるネットワーク内から、トピックにメッセージを発行することができました。メッセージは、パブリックインターネットに公開されることなくプライベートで発行されました。
ステップ 7: クリーンアップする
作成したリソースは、保持することを希望しない限り、今すぐ削除できます。使用しなくなった AWS リソースを削除することで、 への不要な課金を防ぐことができます AWS アカウント。
まず、Amazon VPC コンソールを使用して VPC エンドポイントを削除します。次に、 AWS CloudFormation コンソールでスタックを削除して、作成した他のリソースを削除します。スタックを削除すると、 AWS CloudFormation はスタックのリソースを から削除します AWS アカウント。
VPC エンドポイントを削除するには
-
Amazon VPC コンソール (https://console.aws.amazon.com/vpc/
) を開きます。 -
左側のナビゲーションメニューで、[エンドポイント] を選択します。
-
作成したエンドポイントを選択します。
-
[アクション] を選択してから、[エンドポイントの削除] を選択します。
-
[エンドポイントの削除] ウィンドウで、[はい、削除します] を選択します。
エンドポイントのステータスが [削除中] に変わります。削除が完了すると、エンドポイントがページから削除されます。
AWS CloudFormation スタックを削除するには
-
https://console.aws.amazon.com/cloudformation
で AWS CloudFormation コンソールを開きます。 -
[VPCE-Tutorial-Stack] スタックを選択します。
-
[アクション] を選択してから、[スタックの削除] を選択します。
-
[スタックの削除] ウィンドウで、[はい、削除します] を選択します。
スタックのステータスが DELETE_IN_PROGRESS に変わります。削除が完了すると、スタックがページから削除されます。
関連リソース
詳細については、以下のリソースを参照してください。