翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon からの Amazon SNSメッセージの発行 VPC
このセクションでは、メッセージをプライベートネットワークで安全に保ちながら Amazon SNSトピックに発行する方法について説明します。Amazon Virtual Private Cloud (Amazon ) でホストされている Amazon EC2インスタンスからメッセージを公開しますVPC。メッセージは、パブリックインターネットを経由せずに AWS ネットワーク内に残ります。からメッセージをプライベートに公開することでVPC、アプリケーションと Amazon 間のトラフィックのセキュリティを向上させることができますSNS。このセキュリティは、お客様に関する個人を特定できる情報 (PII) を発行する場合や、アプリケーションが市場規制の対象である場合に重要です。例えば、プライベート公開は、医療保険の相互運用性と説明責任に関する法律 (HIPAA) に準拠する必要がある医療システムや、Payment Card Industry Data Security Standard (PCI ) に準拠する必要がある金融システムがある場合に役立ちますDSS。
一般的なステップは次のとおりです。
-
AWS CloudFormation テンプレートを使用して、 に一時的なプライベートネットワークを自動的に作成します AWS アカウント。
-
VPC を Amazon に接続するVPCエンドポイントを作成しますSNS。
-
Amazon EC2インスタンスにログインし、メッセージを Amazon SNSトピックにプライベートに公開します。
-
メッセージが正常に配信されたことを確認します。
-
このプロセス中に作成したリソースを削除して、 に残らないようにします AWS アカウント。
次の図は、これらのステップを完了する際に AWS アカウントで作成するプライベートネットワークを示しています。
このネットワークは、Amazon EC2インスタンスVPCを含む で構成されます。インスタンスは、インターフェイスエンドポイント SNSを介して Amazon に接続します。 VPC このタイプのエンドポイントは、 を搭載した サービスに接続します AWS PrivateLink。この接続が確立されると、ネットワークがパブリックインターネットから切断されていても、Amazon EC2インスタンスにログインし、Amazon SNSトピックにメッセージを公開できます。トピックは、受信したメッセージを 2 つのサブスクライブ AWS Lambda 関数にファンアウトします。これらの関数は、Amazon CloudWatch Logs で受信したメッセージをログに記録します。
このステップの完了には 20 分ほどかかります。
トピック
開始する前に
開始する前に、Amazon Web Services (AWS) アカウントが必要です。サインアップすると、アカウントは Amazon SNSや Amazon を含む AWSのすべてのサービスに自動的にサインアップされますVPC。アカウントをまだ作成していない場合は、https://aws.amazon.com/
ステップ 1: Amazon EC2キーペアを作成する
キーペアは、Amazon EC2インスタンスにログインするために使用されます。これは、ログイン情報の暗号化に使用されるパブリックキーと、その復号に使用されるプライベートキーで構成されます。キーペアを作成するときは、プライベートキーのコピーをダウンロードします。その後、キーペアを使用して Amazon EC2インスタンスにログインします。ログインするには、キーペアの名前を指定し、プライベートキーを指定します。
キーペアを作成するには
にサインイン AWS Management Console し、 で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/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 サブネット、セキュリティグループ、インターネットゲートウェイ、ルートテーブルなど、 および関連するネットワークリソース。
-
のサブネットに起動される Amazon EC2インスタンスVPC。
-
Amazon SNSトピック。
-
2 つの AWS Lambda 関数。これらの関数は、Amazon SNSトピックに発行されるメッセージを受信し、イベントを CloudWatch ログに記録します。
-
Amazon CloudWatch メトリクスとログ。
-
Amazon EC2インスタンスが Amazon を使用できるようにするIAMロールSNS、および Lambda 関数が CloudWatch ログに書き込むことを可能にする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 のVPCエンドポイントを作成した後SNS、パブリッシュの試行は成功します。
Amazon EC2インスタンスに接続するには
-
で Amazon EC2コンソールを開きますhttps://console.aws.amazon.com/ec2/
。 -
左のナビゲーションメニューで、[インスタンス] セクションを見つけます。続いて、[インスタンス] を選択します。
-
インスタンスのリストで、VPCE-Tutorial-EC2Instance を選択します。
-
パブリック 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 用の Amazon VPCエンドポイントを作成する SNS
VPC を Amazon に接続するにはSNS、インターフェイスVPCエンドポイントを定義します。エンドポイントを追加したら、 の Amazon EC2インスタンスにログインしVPC、そこから 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トピックにメッセージを発行する
に Amazon のエンドポイントVPCが含まれているのでSNS、Amazon EC2インスタンスにログインし、トピックにメッセージを公開できます。
メッセージを発行するには
-
ターミナルが Amazon EC2インスタンスに接続されなくなった場合は、再度接続します。
$
ssh -i VPCE-Tutorial-KeyPair.pem ec2-user@
instance-hostname
-
Amazon SNSトピックにメッセージを公開するために以前に行ったのと同じコマンドを実行します。今回は、発行の試行は成功し、Amazon はメッセージ ID SNSを返します。
$
aws sns publish --region
aws-region
--topic-arnsns-topic-arn
--message "Hello"{ "MessageId": "5b111270-d169-5be6-9042-410dfc9e86de" }
ステップ 6: メッセージの配信を確認する
Amazon SNSトピックは、メッセージを受信すると、2 つのサブスクライブ Lambda 関数に送信してメッセージをファンアウトします。これらの関数はメッセージを受信すると、イベントをログに記録します CloudWatch 。メッセージ配信が成功したことを確認するには、関数が呼び出されたことを確認し、 CloudWatch ログが更新されていることを確認します。
Lambda 関数が呼び出されたことを確認するには
-
で AWS Lambda コンソールを開きますhttps://console.aws.amazon.com/lambda/
。 -
Functions ページで、VPCE-Tutorial-Lambda-1 を選択します。
-
[モニタリング] を選択します。
-
[呼び出しカウント] グラフを確認します。このグラフには、Lambda 関数が実行された回数が表示されます。
呼び出しカウントは、トピックにメッセージを発行した回数に一致します。
CloudWatch ログが更新されたことを検証するには
-
で CloudWatch コンソールを開きますhttps://console.aws.amazon.com/cloudwatch/
。 -
左側のナビゲーションメニューで [ログ] を選択します。
-
Lambda 関数によって書き込まれたログを確認します。
-
/aws/lambda/VPCE-Tutorial-Lambda-1/ ロググループを選択します。
-
ログストリームを選択します。
-
ログにエントリ
From SNS: Hello
が含まれていることを確認します。 -
コンソール上部の [ロググループ] を選択して、[ロググループ] ページを表示します。次に、 the /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 スタックを削除するには
-
AWS CloudFormation コンソールを https://console.aws.amazon.com/cloudformation
で開きます。 -
スタック VPCE-チュートリアルスタック を選択します。
-
[アクション] を選択してから、[スタックの削除] を選択します。
-
[スタックの削除] ウィンドウで、[はい、削除します] を選択します。
スタックステータスが DELETE_IN_PROGRESS に変わります。削除が完了すると、スタックがページから削除されます。
関連リソース
詳細については、以下のリソースを参照してください。