2016-10-02 2 views
1

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 오류없이.

따라서 배달 상태가 활성화 된 역할 및 플랫폼 응용 프로그램을 만드는 올바른 방법은 무엇입니까?

답변

2

역할을 만들 때 최종 일관성이 발생합니다. 시간 지연은 역할이 다음 API 요청에 "가시적"인 시간을 허용합니다. 임의의 시간 지연 대신 IAM 역할을 열거하여 필요한 역할이 "표시"되는지 확인할 수 있습니다.

+0

역할이 "보이지"않으면 어떻게해야합니까? –

+0

'listRoles()'요청에서 그 역할이 반환되는지 확인하는 것이 가장 좋습니다. 역할이 반환되지 않으면 잠시 기다렸다가 다시 확인하십시오. 그렇게하면'createPlatformApplication()'호출이있을 때 그 역할을 사용할 수있다. – jbird

+1

'listRoles()'는 노출 된 API를 통해 직접 IAM과 이야기하고 다른 요청은 말하는 다른 서비스와 이야기하고 있기 때문에'listRoles()'가 리턴하는 것보다 실제로 약간의 시간이 걸릴 수 있습니다 추가 전파 지연이 발생할 수있는 잠재적으로 다른 (AWS/내부) 인터페이스를 통해 IAM으로 전송할 수 있습니다. 잠재적으로 유용 : [유효하기 전에 AWS IAM 정책을 적용한 후 얼마 동안 기다려야합니까?] (http://stackoverflow.com/q/20156043/1695906)이 질문은 역할 + SNS보다는 사용자 정책 + S3에 대한 질문이며, 하지만 그 해답은 똑같이 적용되어야합니다. +1 –

관련 문제