2023/11/28に公開
2023/12/17
皆さん。AWS Cloudformationはご存知ですか??最近流行りのIaC
です。AWS認定資格でも良く出てきたりするものの、個人開発ではあまり使う機会が無いと思います。本記事では、そんなCloudformationを実務で常に使用している私の考えも踏まえながら、図を用いて丁寧に解説していきます!
本記事では以下の構成で進めていきます。本記事が読み終わる頃にはCloudformationが綺麗に理解できていることと思います。
IaCとは、Infrastructure as Code
の略です。コードを書いてインフラ構築することをIaCと呼びます。CloudformationはIaCの中に分類されます。後ほどお伝えしますが、インフラをコードで管理することで様々なメリットがあります。
例) AWS Cloudformation, Terraform
その中でAWS Cloudformationとは、コードを書く事でAWSサービスを自動で作成してくれるサービスです!AWSサービス専門のIaCになります。
ここからはCloudformationの実際の使い方に関して、以下の流れでお伝えしていきます。
Cloudformationで利用される以下の単語をまずは理解しましょう。
次に行うことはAWSリソースの理解を深めることです。これが非常に重要です。
Cloudformationと言っても、結局はAWSマネジメントコンソールから手作業で構築する設定内容をコードで書いているものです。つまり、構築したいリソースそのものの理解が足りていないと、コードを記述する際にどのように設定すれば良いかわかりません。そのため、マネジメントコンソールで手作業で構築する際の設定と比較して、コードに起こしていくやり方を取る場合もあります。
次にどのようにスタックを分けるかを決めます。以下の図で示します。
スタックAは、IAMポリシーのみを定義しています。一方でスタックBはIAMポリシーを定義し、IAMロールに紐づけ、それをLambdaにアタッチするまでを定義しています。
スタックは、全く同じ環境を再度作りたい時に、スタックをデプロイするとすぐに構築されます。つまり、細かくリソースを分けて記述するのか、またある程度複数のリソースをまとめて定義しておくのかといったスタック戦略を定める必要があります。
スタック戦略が定まったところで、実際にテンプレートを記述していきます。そのために「cloudformation 構築したいリソース名」で検索すると上位でAWS Documentationのサイトがヒットすると思います。jsonやyamlそれぞれの記述方法が載っていますので、これを確認します。
その後、ご自身の好きなテキストエディタなどで記述していきます。テンプレートの記述方法やスタックの設定は別記事でお伝えしますので、お待ちください。
※私はCloudformationは普段yamlで書いています。Cloudformationに限らず、CI/CDのデプロイメントやk8sのserviceなど、yamlを使う場面の方が多いためです。
Type: AWS::EC2::Instance
Properties:
AdditionalInfo: String
Affinity: String
AvailabilityZone: String
BlockDeviceMappings:
- BlockDeviceMapping
CpuOptions:
CpuOptions
CreditSpecification:
CreditSpecification
DisableApiTermination: Boolean
EbsOptimized: Boolean
ElasticGpuSpecifications:
- ElasticGpuSpecification
ElasticInferenceAccelerators:
- ElasticInferenceAccelerator
EnclaveOptions:
EnclaveOptions
HibernationOptions:
HibernationOptions
HostId: String
HostResourceGroupArn: String
IamInstanceProfile: String
ImageId: String
InstanceInitiatedShutdownBehavior: String
InstanceType: String
Ipv6AddressCount: Integer
Ipv6Addresses:
- InstanceIpv6Address
KernelId: String
KeyName: String
LaunchTemplate:
LaunchTemplateSpecification
LicenseSpecifications:
- LicenseSpecification
Monitoring: Boolean
NetworkInterfaces:
- NetworkInterface
PlacementGroupName: String
PrivateDnsNameOptions:
PrivateDnsNameOptions
PrivateIpAddress: String
PropagateTagsToVolumeOnCreation: Boolean
RamdiskId: String
SecurityGroupIds:
- String
SecurityGroups:
- String
SourceDestCheck: Boolean
SsmAssociations:
- SsmAssociation
SubnetId: String
Tags:
- Tag
Tenancy: String
UserData: String
Volumes:
- Volume
テンプレートを記述し、スタックをデプロイして作成完了です。スタックをデプロイすると、各リソースが順に構築されていきます。
ここからはCloudformationのメリットをお伝えしていきます。
ここからはCloudformationのデメリットをお伝えしていきます。
上記を踏まえるとこんな場合にCloudformationはオススメできます。
いかがでしたか?CloudformationなどのIaCは近年企業に導入されてきている技術です。個人開発でメリットを享受できることは少ないかもしれません。ただインフラエンジニアとしてキャリアを築く際には、必ず関わる技術であると思います。学習として捉えて、現在の構成をIaCで再構築してみるのも面白いかもしれません。
tearnではCloudformationを用いたコンテンツも随時アップロードしていきますので、是非チェックしてみてください!最後までお読みいただきありがとうございました。
目次