ask-cli에서 alexa skill을 배포할 때 자동 생성된 IAM 역할에서 DynamoDB를 사용할 수 있도록 합니다.

절대 잊기 때문에 메모.

도전


  • alexa skill 세트를 ask-cli로 배포하고 lambda 함수가 생성되었으므로,
    alexa developer Console의 테스트 화면에서 호출해 보았지만, INVALID_RESPONSE가 되어 버린다.
  • AWS lambda의 Management console에서 "amazon alexa start session"을 복사한 테스트 이벤트를 실행해 보면 "테이블을 만들 수 없습니다"라는 의미의 오류가 발생했습니다.
  • AskSdk.DynamoDbPersistenceAdapter Error: Could not create table (テーブル名)
    
  • lambda 함수를 보면 DynamoDB에 대한 액세스 권한이 없었습니다. omg


  • 그렇게 말하면, lambda 함수의 코드상에서는 이하와 같이 「세션은 DynamoDB에 보존한다, 존재하지 않으면 작성한다」라고 지정하고 있었다.
  • exports.handler = skillBuilder
      .addRequestHandlers(
        LaunchRequestHandler,
      (中略)
      )
      .withTableName("テーブル名") // セッション情報を保存するDynamoDB上のテーブル名
      .withAutoCreateTable(true) // テーブルが無ければスキルから作成する
      .addErrorHandlers(ErrorHandler)
      .lambda();
    
    
  • 그러나 「ask new」로 겟트한 샘플 코드 중에는, DynamoDB를 사용할 경우의 IAM 롤의 지정 개소가 보이지 않는다. 이것은 도대체 어디서 쓸 것인가?

  • 해결책



    설정 파일인것을 소일시간 수색했지만 보이지 않기 때문에 AWS 콘솔에서 직접 IAM을 괴롭히고 해결.

    (1) IAM 콘솔에서 자동 생성 된 역할을 찾고 권한 부여



    AWS 콘솔 > IAM > 역할 을 열고 해당 alexa 스킬 이름의 머리에 "ask-lambda-"가 붙은 역할을 찾습니다.
  • 참고) ask-cli로 배포했을 때의 스킬명과 Lambda 함수명과 롤명의 관계
  • 스킬 이름 : nightwatch_snow_cli (skill.json의 manifest 내의 name으로 지정된 문자열)
  • Lambda 함수 이름: ask-custom-nightwatch_snow_cli-default
  • 역할 이름: ask-lambda-nightwatch_snow-cli




  • 역할 이름 클릭
    > "정책 첨부"버튼을 클릭
    >「정책의 필터」입력란에 「Dynamo」라고 입력
    >「AmazonDynamoDBFullAccess」에 체크
    > "정책 첨부"를 클릭

    (2) Lambda 함수를 실행하여 테이블에 기록되는지 확인



    Lambda 함수의 테스트 이벤트를 실행합니다.
    오류가 발생하지 않는지 확인. (다른 오류는 나왔지만 (w)
    AWS의 DynamoDB 콘솔에서 테이블이 생성되고,
    테이블에 세션 정보가 기록되어 있는지 확인.

    (3) Todo



    Lambda 함수의 콘솔로 돌아가서 다시 읽으면 DynamoDB뿐만 아니라 EC2 등도 권한도 붙어 있다. IAM 역할로 AmazonDynamoDBFullAccess를 선택하면 이렇게 된다. 원래 DynamoDB에 대해서도 full이 아니어도 좋다. 나중에 줄인다.

    이상으로!

    좋은 웹페이지 즐겨찾기