😴

CloudFormationレジストリのサードパーティ拡張機能をテンプレートでアクティブにするリソースタイプをSleepの例で説明。

2023/09/30に公開

AWS::CloudFormation::TypeActivationを利用する

前回以下のような記事を書きました。
https://zenn.dev/mjxo/articles/98ce53e3440b75
実際にはタイトルにもあるパブリックなサードパーティ拡張機能をアクティベートして利用する事で利用可能となるリソースタイプとなります。

テンプレートで一挙手で出来るのではないかと思いドキュメントを眺めていた所、やはり存在しましたので、使ってみたいと思います。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-typeactivation.html


手順

アクティベーションするリソースタイプ

これにしてみます。
出来そうな事が直感的ですね。(どういうケースで必要になりそうかは想像出来ていませんが。)


付与するロールについて

ここにあります。
https://github.com/aws-cloudformation/community-registry-extensions/blob/main/resources/Time_Sleep/resource-role-prod.yaml

今回の拡張機能に付与するロールに関係するノート(記述)がありました。


テンプレート

typeActivationTest.yml
AWSTemplateFormatVersion: "2010-09-09"
# ------------------------------------------------------------#
# Resources
# ------------------------------------------------------------#
Resources:
  # ------------------------------------------------------------#
  # TypeActivation
  # ------------------------------------------------------------#
  TypeActivation: 
    Type: AWS::CloudFormation::TypeActivation
    Properties: 
      # ※① PublicTypeArn、またはTypeName、TypeおよびPublisherId を指定する必要があります。 を指定する必要があり。
      # ※② MajorVersion または VersionBump、両方を指定する事は出来ないと記載あり。MajorVersionのデフォルト値がLatestVersionになる事から、両方設定しない場合はLatestVersionが選択された事になる。

      AutoUpdate: true
      ExecutionRoleArn: 
        Fn::GetAtt: ExecutionRole.Arn
      # LoggingConfig: 
      #   LoggingConfig
      # MajorVersion: # # 必要な場合は設定(デフォルトはLatestVersionになっている。)
      PublicTypeArn: arn:aws:cloudformation:us-east-1::type/resource/c830e97710da0c9954d80ba8df021e5439e7134b/AwsCommunity-Time-Sleep
      # PublisherId: String
      Type: RESOURCE # HOOK | MODULE | RESOURCE
      TypeName: AwsCommunity::Time::Sleep
      # TypeNameAlias: # 必要な場合は設定
      # VersionBump: # 指定が可能且つ、必要な場合は設定 # MAJOR | MINOR
  # ------------------------------------------------------------#
  # Role
  # ------------------------------------------------------------#
  ExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      MaxSessionDuration: 8400
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: resources.cloudformation.amazonaws.com
            Action: sts:AssumeRole
      Path: "/"
      Policies:
        - PolicyName: ResourceTypePolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                - "ssm:DeleteParameter"
                - "ssm:GetParameter"
                - "ssm:PutParameter"
                Resource: !Sub "arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/CloudFormation/AwsCommunity/Time/Sleep/*"
# ------------------------------------------------------------#
# Outputs
# ------------------------------------------------------------#
Outputs:

  Arn:
    Value:
      Fn::GetAtt: TypeActivation.Arn


無事作成されました。


こちらも「アクティベート化済み」になっている事が確認出来ました。


試しにSleepを利用してみる

以下githubです。
https://github.com/aws-cloudformation/community-registry-extensions/tree/main/resources/Time_Sleep

sleepTest.yml
Resources:
  Sleep1:
    Type: AwsCommunity::Time::Sleep
    Properties:
        Seconds: 5
        SleepOnCreate: true
        SleepOnUpdate: true
        SleepOnDelete: true

  Sleep2:
    Type: AwsCommunity::Time::Sleep
    Properties:
        Seconds: 10
        SleepOnCreate: true
        SleepOnUpdate: true
        SleepOnDelete: true
        Triggers:
        - !Ref Sleep1

  Sleep3:
    Type: AwsCommunity::Time::Sleep
    Properties:
        Seconds: 15
        SleepOnCreate: true
        SleepOnUpdate: true
        SleepOnDelete: false
        Triggers:
        - !Ref Sleep2

  Sleep4:
    DependsOn: Sleep3
    Type: AwsCommunity::Time::Sleep
    Properties:
        Seconds: 20
        SleepOnCreate: true
        SleepOnUpdate: true
        SleepOnDelete: false

Triggersプロパティについて、DependsOnとの違いの有無など、色々試してみると面白いかもしれません。

スタックを削除してみると

アクティベートも解除されました。

以上でした

全サードパーティリソースのアクティベートについて、どういう管理がベストかまた考えてみたいと思いました。
有難うございました。

Discussion