AWS SAM CloudFormationでLambdaのIAMロールをデプロイする方法

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が作成されていることを確認します。

AWS SAM CloudFormationでLambdaのIAMロールをデプロイする方法

IAMロールの確認

IAMロールがSampleRoleという名前で作成されているか確認します。

AWS SAM CloudFormationでLambdaのIAMロールをデプロイする方法

テンプレートファイルで指定したポリシーがアタッチされているIAMロールが作成されていることが確認できます。

スタックのエクスポート名

スタックの出力ページの一番右にエクスポート名という欄があります。もしくは左側メニューから一覧が表示されます。

AWS SAM CloudFormationでLambdaの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
Fn::Sub - AWS CloudFormation
AWS CloudFormation Fn::Sub 関数を使用して、入力文字列の変数を指定した値に置き換えます。

コメント

株式会社CONFRAGE ITソリューション事業部をもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む

タイトルとURLをコピーしました