AWSサーバーレスリポジトリでアプリケーションを公開するためのSAMテンプレートに取り組んでいます。しかし、ラムダにポリシーを追加しようとすると、エラーが表示されます。サーバーレスアプリケーションの仕様が無効です。検出されたエラーの数:1.エラー:ID [SyncPostDataFromSfLambda]のリソースは無効です。 「ポリシー」プロパティでは、ポリシーテンプレートのみがサポートされています。
以下は、私のSAMテンプレートの例です。
{
"AWSTemplateFormatVersion": "2010-09-09",
"Transform": "AWS::Serverless-2016-10-31",
"Description": "Deployment",
"Resources": {
"SyncPostDataToSfLambda": {
"Type": "AWS::Serverless::Function",
"Properties": {
"Handler": "index.handler",
"FunctionName": "myLambdaFunction",
"CodeUri": "s3 URL",
"Runtime": "nodejs6.10",
"MemorySize": 512,
"Policies": [
"AmazonDynamoDBFullAccess"
],
"Events": {
"PostResource": {
"Type": "Api",
"Properties": {
"RestApiId": {
"Ref": "API"
},
"Path": "/apipath",
"Method": "post"
}
}
}
}
}
}
}
本日(2018-10-09)現在、SAMテンプレートはインラインポリシードキュメントを既にサポートしています。
次に例を示します。
Resources:
SomeFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs8.10
Policies:
- Statement:
- Sid: SSMDescribeParametersPolicy
Effect: Allow
Action:
- ssm:DescribeParameters
Resource: '*'
- Sid: SSMGetParameterPolicy
Effect: Allow
Action:
- ssm:GetParameters
- ssm:GetParameter
Resource: '*'
参照:
現在はSAMポリシーテンプレートしか使用できないようです。
AWSは、ここでSAMポリシーテンプレートの信頼できる情報/概要を維持しています: https://docs.aws.Amazon.com/serverlessrepo/latest/devguide/using-aws-sam.html
このドキュメントには、さらにAWSリソースやポリシーテンプレートが必要な場合は AWSサポート に連絡する必要があることも記載されています。
それらの短い概要と使用方法の例は、ここにあります: https://github.com/awslabs/serverless-application-model/blob/master/examples/2016-10-31/policy_templates/all_policy_templates .yaml
この回答を投稿した時点で現在サポートされているSAMポリシーテンプレートの概要は次のとおりです。
これらのポリシーテンプレートのほとんどすべてを構成する必要があります。これらのテンプレートの構成方法については、AWSのドキュメント(上記のリンク)を参照してください。
公式リポジトリの例からの ポリシーテンプレート の完全なリストを以下に示します。
Transform: AWS::Serverless-2016-10-31
Resources:
MyFunction:
Type: 'AWS::Serverless::Function'
Properties:
CodeUri: src/
Handler: index.handler
Runtime: nodejs4.3
Policies:
- SQSPollerPolicy:
QueueName: name
- LambdaInvokePolicy:
FunctionName: name
- CloudWatchPutMetricPolicy: {}
- EC2DescribePolicy: {}
- DynamoDBCrudPolicy:
TableName: name
- DynamoDBReadPolicy:
TableName: name
- SESSendBouncePolicy:
IdentityName: name
- ElasticsearchHttpPostPolicy:
DomainName: name
- S3ReadPolicy:
BucketName: name
- S3CrudPolicy:
BucketName: name
- AMIDescribePolicy: {}
- CloudFormationDescribeStacksPolicy: {}
- RekognitionDetectOnlyPolicy: {}
- RekognitionNoDataAccessPolicy:
CollectionId: id
- RekognitionReadPolicy:
CollectionId: id
- RekognitionWriteOnlyAccessPolicy:
CollectionId: id
- RekognitionLabelsPolicy: {}
- SQSSendMessagePolicy:
QueueName: name
- SNSPublishMessagePolicy:
TopicName: name
- VPCAccessPolicy: {}
- DynamoDBStreamReadPolicy:
TableName: name
StreamName: name
- KinesisStreamReadPolicy:
StreamName: name
- SESCrudPolicy:
IdentityName: name
- SNSCrudPolicy:
TopicName: name
- KinesisCrudPolicy:
StreamName: name
- KMSDecryptPolicy:
KeyId: keyId
- SESBulkTemplatedCrudPolicy:
IdentityName: name
- SESEmailTemplateCrudPolicy: {}
- FilterLogEventsPolicy:
LogGroupName: name
- StepFunctionsExecutionPolicy:
StateMachineName: name