Lambda에서 다른 리전에 SNS Publish할 때 리전 지정
Lambda에서 다른 지역에 SNS 게시
Lambda에서는 Python3.6을 사용하고 있습니다.
버지니아 북부 지역에서 도쿄 지역의 SNS로 Publish합니다.
버지니아의 Lambda 코드는 이쪽.
lambda_functionfrom __future__ import print_function
import boto3
import json
import os
def lambda_handler(event, context):
region = os.environ.get("REGION")
sns = boto3.client("sns", region_name=region)
print(region)
print(sns)
response = sns.publish(
TopicArn=os.environ.get("SNS_ARN"),
Subject="テスト",
Message="Lambdaで異なるリージョンにSNS Publishしてみた"
)
print(response)
return response
환경 변수 REGION
에 대상 SNS의 리전을, SNS_ARN
에 SNS 주제 ARN을 설정하고 있습니다.
빈 테스트를 만들고 테스트를 실행합니다.
몇 분 후, 이하와 같이 메일의 수신을 확인할 수 있었습니다.
리전을 지정하지 않으면 An error occurred (InvalidParameter) when calling the Publish operation: Invalid parameter: TopicArn
와 오류가 발생합니다.
왜 지역을 지정해야 하는가?
리전을 지정하지 않으면 boto3의 디폴트 리전이 Lambda의 리전이 되기 때문입니다.
왜냐하면 AWS가 Lambda 환경 변수에서 리전을 정의하기 때문입니다.
Lambda에서 os.environ
(환경 변수)를 print로 표시하고 발췌 한 것이 다음 JSON입니다.
맨 아래에 AWS_REGION
가 있으며 버지니아 북부 지역이 지정되어 있습니다.
{
"PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
"LD_LIBRARY_PATH": "/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
"LANG": "en_US.UTF-8",
"TZ": ":UTC",
"_HANDLER": "lambda_function.lambda_handler",
"LAMBDA_TASK_ROOT": "/var/task",
"LAMBDA_RUNTIME_DIR": "/var/runtime",
"AWS_REGION": "us-east-1",
}
클라이언트 리전을 지정하지 않으면 이번에는 기본 클라이언트 리전이 버지니아 북부 리전이 됩니다.TopicArn
에서 적절하게 리전을 지정해도 클라이언트의 리전과 다르기 때문에 에러가 나옵니다.
boto3.client()
를 실행할 때 매개 변수로 자격 증명 (지역)을 전달하여 환경 변수보다 우선합니다 (htps : // 보토 3. 아마조나 ws. 코 m/v1/도쿠멘들 온/아피/아 st/구이데/c레덴치아 ls. html # gue-c redenchia ls).
Reference
이 문제에 관하여(Lambda에서 다른 리전에 SNS Publish할 때 리전 지정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kazu_kazu/items/15084326c1b8a2a8f5d3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from __future__ import print_function
import boto3
import json
import os
def lambda_handler(event, context):
region = os.environ.get("REGION")
sns = boto3.client("sns", region_name=region)
print(region)
print(sns)
response = sns.publish(
TopicArn=os.environ.get("SNS_ARN"),
Subject="テスト",
Message="Lambdaで異なるリージョンにSNS Publishしてみた"
)
print(response)
return response
리전을 지정하지 않으면 boto3의 디폴트 리전이 Lambda의 리전이 되기 때문입니다.
왜냐하면 AWS가 Lambda 환경 변수에서 리전을 정의하기 때문입니다.
Lambda에서
os.environ
(환경 변수)를 print로 표시하고 발췌 한 것이 다음 JSON입니다.맨 아래에
AWS_REGION
가 있으며 버지니아 북부 지역이 지정되어 있습니다.{
"PATH": "/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin",
"LD_LIBRARY_PATH": "/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib",
"LANG": "en_US.UTF-8",
"TZ": ":UTC",
"_HANDLER": "lambda_function.lambda_handler",
"LAMBDA_TASK_ROOT": "/var/task",
"LAMBDA_RUNTIME_DIR": "/var/runtime",
"AWS_REGION": "us-east-1",
}
클라이언트 리전을 지정하지 않으면 이번에는 기본 클라이언트 리전이 버지니아 북부 리전이 됩니다.
TopicArn
에서 적절하게 리전을 지정해도 클라이언트의 리전과 다르기 때문에 에러가 나옵니다.boto3.client()
를 실행할 때 매개 변수로 자격 증명 (지역)을 전달하여 환경 변수보다 우선합니다 (htps : // 보토 3. 아마조나 ws. 코 m/v1/도쿠멘들 온/아피/아 st/구이데/c레덴치아 ls. html # gue-c redenchia ls).
Reference
이 문제에 관하여(Lambda에서 다른 리전에 SNS Publish할 때 리전 지정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kazu_kazu/items/15084326c1b8a2a8f5d3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)