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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^





コメント