リモート Terraform 状態のより高速なセットアップ
8207 ワード
リモート状態で Terraform を使用してインフラストラクチャを初期化するより迅速な方法があるかどうか疑問に思ったことはありませんか?私の頼りになるのは S3 backend ですが、手動で設定すると、作業を行うスクリプトを作成するよりも時間がかかる場合があります.
AWS 認証情報が既に設定されていると仮定すると、2 つのファイルを作成する必要があります.最初のファイルは、Terraform にアイテムを表示させ、Terraform の状態を取得および更新するための S3 ポリシーです.
当社の S3 ポリシー
したがって、
2 番目のファイルは実際の bash スクリプトです.たとえば
では、
AWS 認証情報が既に設定されていると仮定すると、2 つのファイルを作成する必要があります.最初のファイルは、Terraform にアイテムを表示させ、Terraform の状態を取得および更新するための S3 ポリシーです.
当社の S3 ポリシー
s3_policy.json
:{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::my-bucket",
"Principal": {
"AWS": "ARN"
}
},
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::my-bucket/terraform.tfstate",
"Principal": {
"AWS": "ARN"
}
}
]
}
したがって、
ARN
について疑問に思っている場合でも、大丈夫です.私たちのスクリプトはそれを処理します. Resource
アイテムごとに Statement
を抽象化することもできます.2 番目のファイルは実際の bash スクリプトです.たとえば
tf-setup.sh
とします (このファイルを実行できるように chmod +x
を覚えておいてください!):#!/bin/bash
# Create S3 Bucket
MY_ARN=$(aws iam get-user --query User.Arn --output text 2>/dev/null)
aws s3 mb "s3://tf-remote-bucket" --region "us-east-1"
sed -e "s/RESOURCE/arn:aws:s3:::tf-remote-bucket/g" -e "s/KEY/terraform.tfstate/g" -e "s|ARN|${MY_ARN}|g" "$(dirname "$0")/s3_policy.json" > new-policy.json
aws s3api put-bucket-policy --bucket "tf-remote-bucket" --policy file://new-policy.json
aws s3api put-bucket-versioning --bucket "tf-remote-bucket" --versioning-configuration Status=Enabled
rm new-policy.json
# Create DynamoDB Table
aws dynamodb create-table \
--table-name "tf-lock-table" \
--attribute-definitions AttributeName=LockID,AttributeType=S \
--key-schema AttributeName=LockID,KeyType=HASH \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
--region "us-east-1"
では、
main.tf
を構成しましょう.terraform {
required_version = ">= 1.0.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 3.29"
}
}
backend "s3" {
encrypt = true
bucket = "tf-remote-bucket"
dynamodb_table = "tf-lock-table"
region = "us-east-1"
key = "terraform.tfstate"
}
}
provider "aws" {
region = "us-east-1"
}
terraform init
出力:Terraform has been successfully initialized!
You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.
If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
terraform plan
および terraform apply
を実行するようにすべて設定されているはずです.ご不明な点や問題が発生した場合は、コメントでお知らせください.Reference
この問題について(リモート Terraform 状態のより高速なセットアップ), 我々は、より多くの情報をここで見つけました https://dev.to/sutt0n/a-faster-setup-for-s3-backend-terraform-states-33igテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol