🇨🇫
CloudFormationを試す
CloudFormationを試す
参考
テンプレートファイル、パラメータファイルの作成
テンプレートファイルを作成します。
$ 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"
}
]
Discussion