SNS 플랫폼 응용 프로그램을 만들고 AWS SDK (Java)를 사용하여 전달 상태 기능을 사용하려고합니다. 첫 번째 단계로 필요한 역할 "SNSSuccessFeedback"및 "SNSFailureFeedback"을 만듭니다. 샘플 코드 (멋져요) : 배달 상태 속성이있는 SNS 플랫폼 응용 프로그램을 만들 수 없습니다.
AmazonIdentityManagementClient aimClient = getAimClient(/*credentials*/)
// create "SNSSuccessFeedback" role:
aimClient.createRole(new CreateRoleRequest().withRoleName("SNSSuccessFeedback")
.withAssumeRolePolicyDocument('{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"sts:AssumeRole"}]}'))
aimClient.putRolePolicy(new PutRolePolicyRequest().withRoleName("SNSSuccessFeedback")
.withPolicyName("oneClick_SNSSuccessFeedback_1234567890")
.withPolicyDocument('{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents","logs:PutMetricFilter","logs:PutRetentionPolicy"],"Resource":["*"]}]}'))
// the same code for "SNSFailureFeedback" role
// get ARN for both "SNSSuccessFeedback" and "SNSFailureFeedback"
// create platform application:
AmazonSNSClient snsClient = getSnsClient(/*credentials*/)
snsClient.createPlatformApplication(new CreatePlatformApplicationRequest()
.withName("myapp")
.withPlatform("APNS")
.withAttributes([PlatformPrincipal: "certificate", PlatformCredential: "key",
SuccessFeedbackRoleArn: successRoleArn, FailureFeedbackRoleArn: failureRoleArn,
SuccessFeedbackSampleRate: "100"]))
그러나
나는 오류 얻을 몇 가지 이유 :잘못된 매개 변수 : 속성 이유 : FailureFeedbackRoleArn : 속성 값이 잘못 ARN : AWS : IAM : 1234567890 : 역할/SNSFailureFeedback (서비스 : AmazonSNS, 상태 코드 : 400, 오류 코드 : InvalidParameter, 요청 ID : c1dbd591-f044-584a-bbac-85fa9a0cbe8d)
지연을 추가하기 만하면 SNS가 Cloudwatch 로그에 쓰기를 허용하는 유효한 역할이 아닙니다. (예 : Thread.sleep (5000)) 롤을 만든 후 플랫폼 응용 프로그램을 만들기 전에 플랫폼 응용 프로그램이 성공적으로 만들어집니다. w 오류없이.
따라서 배달 상태가 활성화 된 역할 및 플랫폼 응용 프로그램을 만드는 올바른 방법은 무엇입니까?
역할이 "보이지"않으면 어떻게해야합니까? –
'listRoles()'요청에서 그 역할이 반환되는지 확인하는 것이 가장 좋습니다. 역할이 반환되지 않으면 잠시 기다렸다가 다시 확인하십시오. 그렇게하면'createPlatformApplication()'호출이있을 때 그 역할을 사용할 수있다. – jbird
'listRoles()'는 노출 된 API를 통해 직접 IAM과 이야기하고 다른 요청은 말하는 다른 서비스와 이야기하고 있기 때문에'listRoles()'가 리턴하는 것보다 실제로 약간의 시간이 걸릴 수 있습니다 추가 전파 지연이 발생할 수있는 잠재적으로 다른 (AWS/내부) 인터페이스를 통해 IAM으로 전송할 수 있습니다. 잠재적으로 유용 : [유효하기 전에 AWS IAM 정책을 적용한 후 얼마 동안 기다려야합니까?] (http://stackoverflow.com/q/20156043/1695906)이 질문은 역할 + SNS보다는 사용자 정책 + S3에 대한 질문이며, 하지만 그 해답은 똑같이 적용되어야합니다. +1 –