質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.34%

AWS SQSへの接続ができない。

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,452

imamoto_browser

score 1078

S3への接続がうまくいったので、今度はキューを作成したいと思い、AWS SQSでキューを作って、aws sdkを使ってphpからキューをいじろうと考えたのですが、下記エラーがでてしまいました。

>PHP Fatal error:  Uncaught exception 'Aws\Sqs\Exception\SqsException' with message 'Error executing "CreateQueue" on "https://sqs.us-west-2.amazonaws.com"; AWS HTTP error: Client error: POST https://sqs.us-west-2.amazonaws.com resulted in a 403 Forbidden response:
<?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>A (truncated...)
AccessDenied (client): Access to the resource https://sqs.us-west-2.amazonaws.com/ is denied. - <?xml version="1.0"?><ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"><Error><Type>Sender</Type><Code>AccessDenied</Code><Message>Access to the resource https://sqs.us-west-2.amazonaws.com/ is denied.</Message><Detail/></Error><RequestId>hogehoge</RequestId></ErrorResponse>'

 ためしたこと

AWSコンソール上(SQSのアクセス許可タブ内で)アクセス許可の追加を押下し、すべてのSQSアクションのチェックボックスにチェックを入れ、効果が許可であることを確かめた。

 アクセス用のソースコード

  1 <?php
  2         require_once("vendor/autoload.php");
  3 
  4         use Aws\S3\S3Client;
  5         use Aws\Sqs\SqsClient;
  6 
  7 
  8         $config = array(
  9                 'version' => 'latest',
 10                 'region'  => 'us-west-2',
 11                 'credentials' => array(
 12                         'key' => 'KEY' ,
 13                         'secret' => 'secret' ,
 14                 )
 15         );
 16 
 17         $s3 = S3Client::factory($config);
 18         $sqs = SqsClient::factory($config);
 19 
 20         $result = $sqs->createQueue(array(
 21                 'QueueName' => 'questring',
 22                 'Attributes' => array(
 23                         //QueueAttribute::DELAY_SECONDS        => 5,
 24                         "ApproximateNumberOfMessages"=> "1000",

 25                 )
 26         )); 
 27 
 28         $queueUrl = $result->get('https://sqs.us-west-2.amazonaws.com/以下省略');


エラーがdeniedなので権限がないからだと判断しておりますが、どのように実行権限を取得すればよいでしょうか。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

使ったことないですが、一応下の手順でうまくいったようです。
ご参考になれば幸いです。

  1. [AWSコンソール]>[SQS]で「新しいキューの作成」>適当に名前を付けて作成。
  2. 「アクセスの許可の追加」→ 何も触っていません。
  3. IAM で sqs-only ユーザーを追加
  4. sqs-only ユーザーに  AmazonSQSFullAccess ポリシーのみをアタッチ
  5. 作成されたアクセスキーとシークレットアクセスキーを指定。
$ mkdir temp
$ cd temp
$ composer require aws/aws-sdk-php
$ vi example.com
<?php
//  AIM User = sqs-only
//  管理ポリシー : AmazonSQSFullaCCess
require_once('vendor/autoload.php');
define('ACCESS_KEY', 'AKIAJWTSVW-----7BGFQ');
define('SECRET_ACCESS_KEY', 'HYopx6Em------y4wISO5Cj97ZQtYeNoRTwl1osW');

use Aws\S3\S3Client;
use Aws\Sqs\SqsClient;

$config = array(
  'version' => 'latest',
  'region'  => 'ap-northeast-1',
  'credentials' => array(
    'key' => ACCESS_KEY,
    'secret' => SECRET_ACCESS_KEY,
  )
);

$sqs = SqsClient::factory($config);

$result = $sqs->createQueue(array(
  'QueueName' => 'questring',
));
var_dump($result);
object(Aws\Result)#80 (1) {
  ["data":"Aws\Result":private]=>
  array(2) {
    ["QueueUrl"]=>
    string(63) "https://sqs.ap-northeast-1.amazonaws.com/906345875711/questring"
    ["@metadata"]=>
    array(4) {
      ["statusCode"]=>
      int(200)
      ["effectiveUri"]=>
      string(40) "https://sqs.ap-northeast-1.amazonaws.com"
      ["headers"]=>
      array(6) {
        ["server"]=>
        string(6) "Server"
        ["date"]=>
        string(29) "Mon, 28 Aug 2017 23:51:49 GMT"
        ["content-type"]=>
        string(8) "text/xml"
        ["content-length"]=>
        string(3) "334"
        ["connection"]=>
        string(10) "keep-alive"
        ["x-amzn-requestid"]=>
        string(36) "ff47d35d-c03b-5ce1-b3f3-81436eeeaf53"
      }
      ["transferStats"]=>
      array(1) {
        ["http"]=>
        array(1) {
          [0]=>
          array(0) {
          }
        }
      }
    }
  }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

権限が不足していないでしょうか。
以下ポリシーを作成してアタッチしてみてください。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmtxxxxxxxxx",
      "Effect": "Allow",
      "Action": [
        "sqs:ChangeMessageVisibility",
        "sqs:CreateQueue",
        "sqs:ReceiveMessage",
        "sqs:SendMessage",
        "sqs:GetQueueAttributes",
        "sqs:GetQueueUrl",
        "sqs:ListQueues"
      ],
      "Resource": "*"
    }
  ]
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る