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 基本記法まとめ