AWS SAM CloudFormationでLambdaのIAMロールをデプロイする方法
Lambda用のIAMロールをデプロイする手順です。ポリシーは適当にアタッチしています。
エクスポートを2つ指定しています。
template-lambda.yml
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: Lambda Deploy Parameters: Stage: Description: Stage name Type: String AllowedValues: – prod – dev – test LambdaRoleName: Description: lambda role name Type: String Resources: LambdaRole: Type: AWS::IAM::Role Properties: RoleName: !Ref LambdaRoleName AssumeRolePolicyDocument: Version: '2012-10-17' Statement: – Effect: Allow Principal: Service: – lambda.amazonaws.com Action: – sts:AssumeRole ManagedPolicyArns: – arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole – arn:aws:iam::aws:policy/AmazonEC2FullAccess – arn:aws:iam::aws:policy/AmazonS3FullAccess Outputs: LambdaRoleID: Description: LambdaRole ID Value: !Ref LambdaRole Export: Name: !Sub – ${Stage}LambdaRoleID – { Stage: !Ref Stage} LambdaRoleARN: Description: LambdaRole ARN Value: !GetAtt LambdaRole.Arn Export: Name: !Sub – ${Stage}LambdaRoleARN – { Stage: !Ref Stage }
aws cloudformation package
コマンドでテンプレートを吐き出します。
C:\tmp>aws cloudformation package --template-file template-lambda.yml --output-template-file template-lambda-out.yml --s3-bucket バケット名 Successfully packaged artifacts and wrote output template to file template-lambda-out.yml. Execute the following command to deploy the packaged template aws cloudformation deploy --template-file C:\tmp\template-lambda-out.yml --stack-name <YOUR STACK NAME>
template-lambda-out.ymlファイルが作成されていると思います。
このファイルをもとに、aws cloudformation deploy
コマンドを実行してlambda-roleというstackを作成します。
C:\tmp>aws cloudformation deploy --template-file template-lambda-out.yml --stack-name lambda-role --region ap-northeast-1 --parameter-overrides Stage=dev LambdaRoleName=SampleRole --profile=default --capabilities CAPABILITY_NAMED_IAM Waiting for changeset to be created.. Waiting for stack create/update to complete Successfully created/updated stack - lambda-role
CloudFormationにlambda-roleが作成されていることを確認します。
IAMロールの確認
IAMロールがSampleRoleという名前で作成されているか確認します。
テンプレートファイルで指定したポリシーがアタッチされているIAMロールが作成されていることが確認できます。
スタックのエクスポート名
スタックの出力ページの一番右にエクスポート名という欄があります。もしくは左側メニューから一覧が表示されます。
このエクスポート名は、他のyamlで!ImportValue エクスポート名
で指定することが出来ます。
例えばLambdaデプロイ時にRole: !ImportValue エクスポート名
とすることが可能になります。
!Sub
CloudFormationでよくみる!Subはパラメータなどの変数を置き換えてくれる組込関数になります。
以下のRoleの部分は変数を置き換えています。${AWS::AccountId}は123456789012のようなアカウントIDに置き換えられます。
FunctionName: test CodeUri: ./test.zip Handler: com.confrage.test.StreamLambdaHandler::handleRequest Runtime: java17 MemorySize: 128 Timeout: 15 Role: !Sub arn:aws:iam::${AWS::AccountId}:role/SampleRole
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント