

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

# チュートリアル:Amazon Virtual Private Cloud から Amazon SQSキューにメッセージを送信する
<a name="sqs-sending-messages-from-vpc"></a>

このチュートリアルでは、安全なプライベートネットワーク経由で Amazon SQS キューにメッセージを送信する方法について説明します。ネットワークには以下が含まれます。
+ Amazon EC2 インスタンスを含む VPC。
+ Amazon EC2 インスタンスがパブリックインターネットを使用せずに Amazon SQS に接続できるようにするインターフェイス VPC エンドポイント。

完全プライベートネットワークでも、Amazon EC2 インスタンスに接続し、Amazon SQS キューにメッセージを送信できます。詳細については、「[Amazon SQSのAmazon Virtual Private Cloud エンドポイント](sqs-internetwork-traffic-privacy.md#sqs-vpc-endpoints)」を参照してください。

**重要**  
Amazon Virtual Private Cloud は HTTPS Amazon SQSエンドポイントでのみ使用できます。
Amazon VPC からメッセージを送信するように Amazon SQS を設定する場合、プライベート DNS を有効にして、デュアルスタックエンドポイントでは `sqs.{{us-east-2}}.amazonaws.com` または `sqs.{{us-east-2}}.api.aws` の形式でエンドポイントを指定する必要があります。
Amazon SQS は、`com.amazonaws.region.sqs-fips` エンドポイントサービスを使用した PrivateLink を介した FIPS エンドポイントもサポートしています。`sqs-fips.region.amazonaws.com` 形式の FIPS エンドポイントに接続できます。
Amazon Virtual Private Cloud でデュアルスタックエンドポイントを使用する場合、リクエストは IPv4 と IPv6 を使用して送信されます。
プライベートDNS は、`queue.amazonaws.com`や`{{us-east-2}}.queue.amazonaws.com`などのレガシーエンドポイントをサポートしていません。

## ステップ 1: Amazon EC2 キーペアを作成する
<a name="create-ec2-key-pair"></a>

*キーペア*を使用すると、Amazon EC2 インスタンスに接続することができます。これは、ログイン情報を暗号化するパブリックキーと、その復号に使用されるプライベートキーで構成されます。

1. [Amazon EC2 コンソール](https://console.aws.amazon.com/ec2/)にサインインします。

1. ナビゲーションメニューの [**ネットワーク & セキュリティ**] で、[**キーペア**] を選択します。

1. [**キーペアの作成**] を選択します。

1. [**キーペア作成**] ダイアログボックスの [**キーペア名**] に `SQS-VPCE-Tutorial-Key-Pair` を入力し、[**作成**] を選択します。

1. ブラウザによってプライベートキーファイル`SQS-VPCE-Tutorial-Key-Pair.pem`が自動的にダウンロードされます。
**重要**  
このファイルを安全な場所に保存します。EC2は、2回目に同じキーペアに対して`.pem`ファイルを生成しません。

1. SSHクライアントに EC2 インスタンスへの接続を許可するには、相手のユーザーのみが読み取り権限を持つことができるように、プライベートキーファイルのアクセス許可を設定します。例:

   ```
   chmod 400 SQS-VPCE-Tutorial-Key-Pair.pem
   ```

## ステップ 2: AWS リソースを作成する
<a name="create-aws-resources"></a>

必要なインフラストラクチャを設定するには、 CloudFormation *template* を使用する必要があります。これは、Amazon EC2 インスタンスや Amazon SQS キューなどの AWS リソースで構成される*スタック*を作成するための設計図です。

このチュートリアルのスタックには、次のリソースが含まれます:
+ VPCおよび関連するネットワーキングリソース(サブネット、セキュリティグループ、インターネットゲートウェイ、およびルートテーブルを含む)。
+ VPCサブネット内に起動されたAmazon EC2インスタンス
+ Amazon SQSキュー

 

1. GitHub [https://github.com/aws-samples/amazon-sqs-samples/blob/master/templates/SQS-VPCE-Tutorial-CloudFormation.yaml](https://github.com/aws-samples/amazon-sqs-samples/blob/master/templates/SQS-VPCE-Tutorial-CloudFormation.yaml)から という名前の CloudFormation テンプレートをダウンロードします。

1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/) にサインインします。

1. [**スタックの作成**] を選択します。

1. [**テンプレートの選択**] ページで、[**テンプレートを Amazon S3 にアップロード**] を選択してから、`SQS-VPCE-SQS-Tutorial-CloudFormation.yaml`ファイルを選択して [**次へ**] を選択します。

1. [**詳細の指定**] ページで、以下の作業を行います。

   1. **[スタック名]** に「`SQS-VPCE-Tutorial-Stack`」と入力します。

   1. [**KeyName**] には、[**SQS-VPCE-Tutorial-Key-Pair**] を選択します。

   1. [**次へ**] を選択します。

1. [**Options(オプション)**] ページで、[**Next(次へ)**] を選択します。

1. **「確認**」ページの**「機能**」セクションで、** AWS CloudFormation がカスタム名で IAM リソースを作成する可能性があることを承認します**」を選択し、**「作成**」を選択します。

CloudFormation はスタックの作成を開始し、**CREATE\_IN\_PROGRESS** ステータスを表示します。プロセスが完了すると、 CloudFormation に [**CREATE\_COMPLETE**]ステータスが表示されます。

## ステップ 3: EC2 インスタンスがパブリックアクセス可能ではないことを確認する
<a name="confirm-ec2-instance-is-not-publicly-accessible"></a>

 CloudFormation テンプレートは、VPC `SQS-VPCE-Tutorial-EC2-Instance`に という名前の EC2 インスタンスを起動します。このEC2 インスタンスはアウトバウンドトラフィックを許可せず、 Amazon SQS にメッセージを送信することができません。これを確認するには、インスタンスに接続し、パブリックエンドポイントへの接続を試行してからメッセージAmazon SQSを送信してみる必要があります。

1. [Amazon EC2 コンソール](https://console.aws.amazon.com/ec2/)にサインインします。

1. ナビゲーションメニューで、[**インスタンス**] の下にある [**インスタンス**] を選択します。

1. [**SQS-VPCE-Tutorial-EC2Instance**] を選択します。

1. **[パブリック DNS]** の下でホスト名をコピーします (例: **ec2-203-0-113-0.us-west-2.compute.amazonaws.com**)。

1. [先に作成したキーペア](#create-ec2-key-pair)が格納されているディレクトリから次のコマンドを使用してインスタンスに接続します、例:

   ```
   ssh -i SQS-VPCE-Tutorial-Key-Pair.pem ec2-user@{{ec2-203-0-113-0.us-east-2.compute.amazonaws.com}}
   ```

1. パブリックエンドポイントに接続を試みます、例:

   ```
   ping amazon.com
   ```

   接続の試行は予期したとおりに失敗します。

1. [Amazon SQSコンソール](https://console.aws.amazon.com/sqs/)にサインインします。

1. キューのリストから、**VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK** など、 CloudFormation テンプレートによって作成されたキューを選択します。

1. **詳細** テーブルで、URL をコピーします、例、 **https://sqs.us-east-2.amazonaws.com/123456789012/**。

1. EC2 インスタンスから、次のコマンドを使用して、キューにメッセージを発行してみます、例:

   ```
   aws sqs send-message --region {{us-east-2}} --endpoint-url {{https://sqs.us-east-2.amazonaws.com/}} --queue-url {{https://sqs.us-east-2.amazonaws.com/123456789012/}} --message-body "Hello from Amazon SQS."
   ```

   送信の試行は予期したとおりに失敗します。
**重要**  
後で Amazon SQSのVPC エンドポイントを作成するときに、送信の試行は成功します。

## ステップ4: Amazon SQSの Amazon VPC エンドポイントを作成する
<a name="create-vpc-endpoint-for-sqs"></a>

VPCを Amazon SQSに接続するには、インターフェイス VPC エンドポイントを定義します。エンドポイントを追加した後、VPC内のEC2 インスタンスから Amazon SQS API を使用できます。これにより、パブリックインターネットを経由せずに、 AWS ネットワーク内のキューにメッセージを送信できます。

**注記**  
EC2 インスタンスは、インターネット上の他の AWS サービスやエンドポイントには引き続きアクセスできません。

1. [Amazon VPC コンソール](https://console.aws.amazon.com/vpc/)にサインインします。

1. ナビゲーションメニューで [**エンドポイント**] を選択します。

1. **エンドポイントの作成** を選択します。

1. {**エンドポイントの作成**} ページの [**サービス名**] で、 Amazon SQS のサービス名を選択します。
**注記**  
サービス名は、現在の AWS リージョンによって異なります。たとえば、**米国東部（オハイオ） にいる場合、サービス名は {{com.amazonaws.}}us-east-2.sqs** になります。

1. [**VPC**] には、**SQS-VPCE-Tutorial-VPC** を選択します。

1. [**サブネット**] には、[**サブネット ID**] に**SQS-VPCE-Tutorial-Subnet**を含むサブネットを選択します。

1. [**セキュリティグループ**] の場合は [**セキュリティグループの選択**] を選択し、[**グループ名**] に**SQS VPCE Tutorial Security Group**を含むセキュリティグループを選択します。

1. **エンドポイントの作成** を選択します。

   インターフェイス VPC エンドポイントが作成され、その ID が表示されます。例: **vpce-0ab1cdef2ghi3j456k**。

1. [**閉じる**] を選択します。

   Amazon VPC コンソールの **[エンドポイント] ページ**を開きます。

 Amazon VPCがエンドポイントの作成を開始し、{**保留中**] ステータスが表示されます。プロセスが完了すると、Amazon VPCに {**利用可能**} ステータスが表示されます。

## ステップ5:Amazon SQSキューにメッセージを送信する
<a name="sqs-vpc-tutorial-publish"></a>

これで VPCに Amazon SQSのエンドポイントが含まれたので、EC2 インスタンスに接続して、キューにメッセージを送信できます。

1. EC2インスタンスに再接続します、例:

   ```
   ssh -i SQS-VPCE-Tutorial-Key-Pair.pem ec2-user@{{ec2-203-0-113-0.us-east-2.compute.amazonaws.com}}
   ```

1. 次のコマンドを使用して、もう一度キューにメッセージを発行してみます、例:

   ```
   aws sqs send-message --region {{us-east-2}} --endpoint-url {{https://sqs.us-east-2.amazonaws.com/}} --queue-url {{https://sqs.us-east-2.amazonaws.com/123456789012/}} --message-body "Hello from Amazon SQS."
   ```

   送信の試行が成功し、メッセージ本文のMD5ダイジェストとメッセージ ID が表示されます、例:

   ```
   {
   	"MD5OfMessageBody": "a1bcd2ef3g45hi678j90klmn12p34qr5",
   	"MessageId": "12345a67-8901-2345-bc67-d890123e45fg"
   }
   ```

 CloudFormation テンプレートによって作成されたキュー (**VPCE-SQS-Tutorial-Stack-CFQueue-1ABCDEFGH2IJK** など) からのメッセージの受信と削除については、「」を参照してください[Amazon SQS でのメッセージの受信と削除](step-receive-delete-message.md)。

リソースの削除の詳細については、以下を参照してください。
+ [VPC エンドポイントの削除](https://docs.aws.amazon.com/vpc/latest/userguide/delete-vpc-endpoint.html)の*Amazon VPC User Guide*
+ [Amazon SQSキューの削除](step-delete-queue.md)
+ 「*Amazon EC2 ユーザーガイド*」の「[インスタンスの終了](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/terminating-instances.html)」
+ 「*Amazon VPC ユーザーガイド*」の「[VPC を削除する](https://docs.aws.amazon.com/vpc/latest/userguide/delete-vpc.html)」
+ *AWS CloudFormation ユーザーガイド*[の「 CloudFormation コンソールでのスタックの削除](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)」
+ 「[Amazon EC2 ユーザーガイド](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#delete-key-pair)」の「*キーペアの削除*」