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

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

新規登録して質問してみよう
ただいま回答率
85.35%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon SQS

Amazon SQS(Amazon Simple Queue Service)は、AWSが提供している分散型メッセージキューイングサービスです。APIを用いてアクセスすることが可能。これによって、アプリケーションのメイン処理と非同期に動いてほしい処理を分離することができます。

Q&A

解決済

1回答

3255閲覧

lambdaでboto3を使ってSQS操作時にエラーが出る

tomoyuki123

総合スコア273

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Amazon SQS

Amazon SQS(Amazon Simple Queue Service)は、AWSが提供している分散型メッセージキューイングサービスです。APIを用いてアクセスすることが可能。これによって、アプリケーションのメイン処理と非同期に動いてほしい処理を分離することができます。

0グッド

0クリップ

投稿2021/04/02 02:37

編集2021/04/02 02:41

質問

SQSのメッセージを受け取るLambda関数を作成してzipにしてアップロードしましたが、以下のエラーメッセージが表示されます。(Python3.8です。)

An error occurred (InvalidClientTokenId) when calling the ReceiveMessage operation: The security token included in the request is invalid.

IAMでアクセスキーを作成してAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYは正しいものを記載してると思っています。
またDocker-Lambdaでローカルで実行するとAWS SQSにアクセスすることは可能であることは確認しています。

何が原因かわからずどなたか教えていただけないでしょうか?

ソースコード

python

1sqs_client = boto3.client( 2 'sqs', 3 endpoint_url=https://sqs.ap-northeast-1.amazonaws.com/***********, 4 region_name=os.environ.get('REGION_NAME', 'ap-northeast-1'), 5 aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID', 'access_key_id'), 6 aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY', 'secret_access_key') 7 ) 8 9response = sqs_client.receive_message( 10 QueueUrl=https://sqs.ap-northeast-1.amazonaws.com/***********/***********, 11 MaxNumberOfMessages=10, 12 VisibilityTimeout=60 13)

エラーログ

{ "errorMessage": "An error occurred (InvalidClientTokenId) when calling the ReceiveMessage operation: The security token included in the request is invalid.", "errorType": "ClientError", "stackTrace": [ " File \"/var/task/lambda_function.py\", line 32, in lambda_handler\n response = sqs_client.receive_message(\n", " File \"/var/task/botocore/client.py\", line 357, in _api_call\n return self._make_api_call(operation_name, kwargs)\n", " File \"/var/task/botocore/client.py\", line 676, in _make_api_call\n raise error_class(parsed_response, operation_name)\n" ] }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

session tokenを取得してSQSクライアントを作るようにしたら成功しました。
またAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYは予約語なので使用できないようでした。

python

1# STSクライアントの作成 2sts_client = boto3.client( 3 'sts', 4 aws_access_key_id=os.environ.get('USER_AWS_ACCESS_KEY_ID', '****'), 5 aws_secret_access_key=os.environ.get('USER_AWS_SECRET_ACCESS_KEY', '****') 6) 7session_token = sts_client.get_session_token(DurationSeconds=86400) 8 9# SQSクライアントの作成 10sqs_client = boto3.client( 11 'sqs', 12 endpoint_url=os.environ.get('ENDPOINT_URL', 'https://sqs.ap-northeast-1.amazonaws.com/****'), 13 region_name=os.environ.get('REGION_NAME', 'ap-northeast-1'), 14 aws_access_key_id=session_token['Credentials']['AccessKeyId'], 15 aws_secret_access_key=session_token['Credentials']['SecretAccessKey'], 16 aws_session_token=session_token['Credentials']['SessionToken'] 17) 18 19response = sqs_client.receive_message( 20 QueueUrl=https://sqs.ap-northeast-1.amazonaws.com/***********/***********, 21 MaxNumberOfMessages=10, 22 VisibilityTimeout=60 23)

投稿2021/04/02 08:54

編集2021/04/02 09:33
tomoyuki123

総合スコア273

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問