CloudFormation"Value of property SourceArn must be of type String"の解決方法

CloudFormation"Value of property SourceArn must be of type String"の解決方法:

AWS LambdaFunctionPermissionの設定で、以下のようなエラーが発生した。

Value of property SourceArn must be of type String

このとき、原因となった部分は以下の通り。

problem.yml
LambdaPermission: 
    Type: AWS::Lambda::Permission 
    Properties: 
      FunctionName: 
        !GetAtt MyLambda.Arn 
      Action: lambda:InvokeFunction 
      Principal: s3.amazonaws.com 
      SourceArn: 
        - !Join 
          - '' 
          - - 'arn:aws:s3:::' 
            - !Sub ${BucketPrefix} 


原因と対策

- !Joinは、!Join以下がリスト型であることを示している。つまり、このymlは以下のように認識されている。

SourceArn.json
{ 
    ...., 
    "Properties":{ 
        "SourceArn":['arn:aws:s3:::{BucketPrefix}'] 
    }, 
    .... 
} 
 
しかし、この項目に入力すべきはStringであり、Listではない。これがエラーの原因だったようだ。

したがって、以下のように直した。

fixed.yml
DataDeliverAndConvertPermission: 
    Type: AWS::Lambda::Permission 
    Properties: 
      FunctionName: 
        !GetAtt MyLambda.Arn 
      Action: lambda:InvokeFunction 
      Principal: s3.amazonaws.com 
      SourceArn: 
        !Join 
          - '' 
          - - 'arn:aws:s3:::' 
            - !Sub ${BucketPrefix} 
これで通った。


参考

YAML 基本記法まとめ

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)