

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

# AWS SDK for PHP バージョン 3 を使用した Amazon SNS でのサブスクリプションの管理
<a name="sns-examples-subscribing-unsubscribing-topics"></a>

Amazon Simple Notification Service (Amazon SNS) トピックを使用して、Amazon Simple Queue Service (Amazon SQS)、HTTP/HTTPS、E メールアドレス、 AWS Server Migration Service (AWS SMS)、または に通知を送信します AWS Lambda。

サブスクリプションは、サブスクライバへのメッセージの送信を管理するトピックにアタッチされます。トピックの作成の詳細については、[「 AWS SDK for PHP バージョン 3 を使用した Amazon SNS でのトピックの管理](sns-examples-managing-topics.md)」を参照してください。

以下の例では、次の方法を示しています。
+ [Subscribe](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#subscribe) を使用して既存のトピックにサブスクライブする。
+ [ConfirmSubscription](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#confirmsubscription) を使用してサブスクリプションを確認する。
+ [ListSubscriptionsByTopic](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#listsubscriptionsbytopic) を使用して既存のサブスクリプションをリストする。
+ [Unsubscribe](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#unsubscribe) を使用してサブスクリプションを削除する。
+ [Publish](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-sns-2010-03-31.html#publish) を使用してトピックのすべてのサブスクライバにメッセージを送信する。

Amazon SNS の使用の詳細については、「[Amazon SNS を使用したシステム間メッセージング](https://docs.aws.amazon.com/sns/latest/dg/sns-system-to-system-messaging.html)」を参照してください。

のすべてのサンプルコード AWS SDK for PHP は[GitHub で入手できます](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/php/example_code)。

## 認証情報
<a name="examplecredentials"></a>

サンプルコードを実行する前に、「」の説明に従って AWS 認証情報を設定します[AWS SDK for PHP バージョン 3 AWS を使用した での認証](credentials.md)。次に AWS SDK for PHP、「」の説明に従って をインポートします[AWS SDK for PHP バージョン 3 のインストール](getting-started_installation.md)。

## E メールアドレスを SNS トピックにサブスクライブする
<a name="subscribe-an-email-address-to-a-topic"></a>

E メールアドレスへのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは E メールアドレスです。確認トークンがこの E メールに送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'email';
$endpoint = 'sample@example.com';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## アプリケーションエンドポイントをトピックにサブスクライブする
<a name="subscribe-an-application-endpoint-to-a-topic"></a>

ウェブアプリへのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは URL です。確認トークンがこのウェブアドレスに送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'https';
$endpoint = 'https://';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## Lambda 関数をトピックにサブスクライブする
<a name="subscribe-a-lam-function-to-a-topic"></a>

Lambda 関数へのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは Lambda 関数です。確認トークンがこの Lambda 関数に送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'lambda';
$endpoint = 'arn:aws:lambda:us-east-1:123456789023:function:messageStore';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックにテキスト SMS をサブスクライブする
<a name="subscribe-a-text-sms-to-a-topic"></a>

複数の電話番号に SMS メッセージを同時に送信するには、各番号をトピックにサブスクライブします。

電話番号へのサブスクリプションを開始するには、[Subscribe](https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html) オペレーションを使用します。

subscribe メソッドを使用し、渡されるパラメータに使用する値に応じて Amazon SNS トピックに複数のさまざまなエンドポイントをサブスクライブできます。これは、このトピックの他の例に示されます。

この例では、エンドポイントは E.164 形式 (国際的な音声通信の規格) の電話番号です。

確認トークンがこの電話番号に送信されます。受け取ってから 3 日以内に、この確認トークンを使用してサブスクリプションを確認します。

Amazon SNS を使用して SMS メッセージを送信するもう 1 つの方法については、「[AWS SDK for PHP バージョン 3 を使用した Amazon SNS での SMS メッセージの送信](sns-examples-sending-sms.md)」を参照してください。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$protocol = 'sms';
$endpoint = '+1XXX5550100';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->subscribe([
        'Protocol' => $protocol,
        'Endpoint' => $endpoint,
        'ReturnSubscriptionArn' => true,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックへのサブスクリプションを確認する
<a name="confirm-subscription-to-a-topic"></a>

実際にサブスクリプションを作成するには、エンドポイントの所有者が、前述のとおりサブスクリプションが最初に確立されたときに送信されるトークンを使用して、トピックからメッセージを受信する意思があることを確認する必要があります。確認トークンの有効期間は 3 日間です。3 日間後、新しいサブスクリプションを作成することでトークンを再送信することができます。

サブスクリプションを確認するには、[ConfirmSubscription](https://docs.aws.amazon.com/sns/latest/api/API_ConfirmSubscription.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription_token = 'arn:aws:sns:us-east-1:111122223333:MyTopic:123456-abcd-12ab-1234-12ba3dc1234a';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->confirmSubscription([
        'Token' => $subscription_token,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックへのサブスクリプションをリストする
<a name="list-subscriptions-to-a-topic"></a>

特定の AWS リージョンで最大 100 個の既存のサブスクリプションを一覧表示するには、[ListSubscriptions](https://docs.aws.amazon.com/sns/latest/api/API_ListSubscriptions.html) オペレーションを使用します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

try {
    $result = $SnSclient->listSubscriptions();
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## トピックからサブスクリプションを解除する
<a name="unsubscribe-from-a-topic"></a>

トピックにサブスクライブされたエンドポイントを削除するには、[Unsubscribe](https://docs.aws.amazon.com/sns/latest/api/API_Unsubscribe.html) オペレーションを使用します。

サブスクリプションの削除に認証が必要な場合は、サブスクリプションの所有者またはトピックの所有者のみがサブスクリプションを解除でき、 AWS 署名が必要です。サブスクリプション解除呼び出しに認証が必要なく、リクエスタがサブスクリプション所有者でない場合は、最終的なキャンセル確認メッセージがエンドポイントに配信されます。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$subscription = 'arn:aws:sns:us-east-1:111122223333:MySubscription';

try {
    $result = $SnSclient->unsubscribe([
        'SubscriptionArn' => $subscription,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```

## Amazon SNS トピックへのメッセージの発行
<a name="publish-a-message-to-an-sns-topic"></a>

Amazon SNS トピックにサブスクライブされた各エンドポイントにメッセージを配信するには、[Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) オペレーションを使用します。

Amazon SNS トピックのメッセージテキストと Amazon リソースネーム (ARN) など、メッセージを発行するためのパラメータを含むオブジェクトを作成します。

 **インポート** 

```
require 'vendor/autoload.php';

use Aws\Exception\AwsException;
use Aws\Sns\SnsClient;
```

 **サンプルコード** 

```
$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'us-east-1',
    'version' => '2010-03-31'
]);

$message = 'This message is sent from a Amazon SNS code sample.';
$topic = 'arn:aws:sns:us-east-1:111122223333:MyTopic';

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'TopicArn' => $topic,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
}
```