🇨🇫

CloudFormationを試す

2023/12/26に公開

CloudFormationを試す

参考

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

テンプレートファイル、パラメータファイルの作成

テンプレートファイルを作成します。

$ cat template.yml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  RepositoryName:
    Type: String
    Default: test-nginx
  ENV:
    Type: String
    Default: test
Resources:
  MyRepository:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: !Ref RepositoryName
      ImageScanningConfiguration:
        ScanOnPush: false
      EncryptionConfiguration:
        EncryptionType: "AES256"
      ImageTagMutability: "MUTABLE"
      Tags:
        - Key: Name
          Value: !Ref RepositoryName
        - Key: ENV
          Value: !Ref ENV

有効性を確認します。

$ aws cloudformation validate-template --template-body file://template.yml | tee parameter.tmp
{
    "Parameters": [
        {
            "DefaultValue": "test-nginx",
            "NoEcho": false,
            "ParameterKey": "RepositoryName"
        },
        {
            "DefaultValue": "test",
            "NoEcho": false,
            "ParameterKey": "ENV"
        }
    ]
}

パラメータファイルを作成します。

$ jq '.Parameters' parameter.tmp > parameter.json
$ vi parameter.json

$ jq . parameter.json
[
  {
    "ParameterValue": "test-nginx",
    "ParameterKey": "RepositoryName"
  },
  {
    "ParameterValue": "test",
    "ParameterKey": "ENV"
  }
]

スタックの作成

テンプレートファイル、パラメータファイルを利用して、スタックを作成します。

$ aws cloudformation create-stack --template-body file://template.yml --parameters file://parameter.json --stack-name <stack_name>
{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:<aws_account_id>:stack/<stack_name>/f1761580-a1e3-11ee-8502-0aef56d3bc2d"
}

スタック作成の実行状況を確認します。

$ aws cloudformation describe-stack-events --stack-name <stack_name>
{
    "StackEvents": [
        {
            "StackId": "arn:aws:cloudformation:ap-northeast-1:<aws_account_id>:stack/<stack_name>/f1761580-a1e3-11ee-8502-0aef56d3bc2d",
            "EventId": "f4c4a440-a1e3-11ee-b0fa-06efe9a91135",
            "ResourceStatus": "CREATE_COMPLETE",
            "ResourceType": "AWS::CloudFormation::Stack",
            "Timestamp": "2023-12-23T22:38:13.110Z",
            "StackName": "<stack_name>",
            "PhysicalResourceId": "arn:aws:cloudformation:ap-northeast-1:<aws_account_id>:stack/<stack_name>/f1761580-a1e3-11ee-8502-0aef56d3bc2d",
            "LogicalResourceId": "<stack_name>"
        },
        {
:

作成されたリソースを確認します。

$ aws cloudformation list-stack-resources --stack-name <stack_name>
{
    "StackResourceSummaries": [
        {
            "ResourceStatus": "CREATE_COMPLETE",
            "DriftInformation": {
                "StackResourceDriftStatus": "NOT_CHECKED"
            },
            "ResourceType": "AWS::ECR::Repository",
            "LastUpdatedTimestamp": "2023-12-23T22:38:12.220Z",
            "PhysicalResourceId": "test-nginx",
            "LogicalResourceId": "MyRepository"
        }
    ]
}

スタックの状態を確認します。

$ aws cloudformation describe-stacks --stack-name <stack_name>
{
    "Stacks": [
        {
            "StackId": "arn:aws:cloudformation:ap-northeast-1:<aws_account_id>:stack/<stack_name>/f1761580-a1e3-11ee-8502-0aef56d3bc2d",
            "DriftInformation": {
                "StackDriftStatus": "NOT_CHECKED"
            },
            "Parameters": [
                {
                    "ParameterValue": "test-nginx",
                    "ParameterKey": "RepositoryName"
                },
                {
                    "ParameterValue": "test",
                    "ParameterKey": "ENV"
                }
            ],
            "Tags": [],
            "EnableTerminationProtection": false,
            "CreationTime": "2023-12-23T22:38:07.639Z",
            "StackName": "<stack_name>",
            "NotificationARNs": [],
            "StackStatus": "CREATE_COMPLETE",
            "DisableRollback": false,
            "RollbackConfiguration": {}
        }
    ]
}

利用されたテンプレートファイルの内容を確認することができます。

$ aws cloudformation get-template --stack-name <stack_name> | jq -r .TemplateBody
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  RepositoryName:
    Type: String
    Default: test-nginx
  ENV:
    Type: String
    Default: test
Resources:
  MyRepository:
    Type: AWS::ECR::Repository
    Properties:
      RepositoryName: !Ref RepositoryName
      ImageScanningConfiguration:
        ScanOnPush: false
      EncryptionConfiguration:
        EncryptionType: "AES256"
      ImageTagMutability: "MUTABLE"
      Tags:
        - Key: Name
          Value: !Ref RepositoryName
        - Key: ENV
          Value: !Ref ENV

スタックの削除

作成したスタックを削除してみます。

$ aws cloudformation delete-stack --stack-name <stack_name>

削除したスタックの状態を確認します。

$ aws cloudformation list-stacks --query 'StackSummaries[?StackName == `<stack_name>`]'
[
    {
        "StackId": "arn:aws:cloudformation:ap-northeast-1:<aws_account_id>:stack/<stack_name>/f1761580-a1e3-11ee-8502-0aef56d3bc2d",
        "DriftInformation": {
            "StackDriftStatus": "NOT_CHECKED"
        },
        "CreationTime": "2023-12-23T22:38:07.639Z",
        "StackName": "<stack_name>",
        "StackStatus": "DELETE_COMPLETE",
        "DeletionTime": "2023-12-23T22:45:40.383Z"
    }
]
GitHubで編集を提案

Discussion