搭建适用于生产环境的Terraform运维环境

简要概述

由于在业务中有机会使用AWS和Terraform,
因此总结了在使用过程中获得的运维经验。
另外,在第2章及以后介绍的Terraform运维方法是个人的最终目标,
并不代表Terraform的最佳实践,只能作为参考。
(例如故意没有使用terraform workspace等)

本文涵盖的环境列表

    • 開発環境 (ローカルPC)

 

    • ステージング環境 (ステージング環境用AWSアカウント)

 

    本番環境 (本番環境用AWSアカウント)

执行环境

    • Linux

Debian [v10.8]

Windows

WSL の Ubuntu [v20.04]
WSLの構築については以下を参照

0. 创建AWS账户 AWS

请参考以下内容,在AWS上创建用于临时环境和生产环境的账户,并为Terraform管理的资源授予相应权限,然后分别获取IAM用户的凭据信息。

    初めてアカウントを作る場合
    AWSアカウントの初期設定について
    IAMユーザ作成について
    マルチアカウント管理について

1. 设立环境

ⅰ. 安装AWS CLI

参照 公式指南,顺序执行以下命令。

①. 下载AWS CLI安装文件

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o ~/awscliv2.zip

2. 安装文件解压缩

unzip ~/awscliv2.zip

③. 安装 AWS CLI。

sudo ~/aws/install

将为AWS CLI保存的设置信息保存到分段环境

aws configure --profile ******(アプリ名など)-stage
    • 上記コマンド実行後、以下の質問に答える。

AWS Access Key ID [None]:
-> ステージング環境用IAMユーザのクレデンシャル情報(Access Key ID)を入力

AWS Secret Access Key [None]:
-> ステージング環境用IAMユーザのクレデンシャル情報(Secret Access Key)を入力

Default region name [None]:
-> ap-northeast-1

Default output format [None]:
-> json

将生产环境的配置信息保存到AWS CLI。

aws configure --profile ******(アプリ名など)-prod
    • 上記コマンド実行後、④と同じ質問に

 

    本番環境用IAMユーザのクレデンシャル情報で答える。

ⅱ. 安装会话管理插件

①. 下载包

curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"

②. 安装会话管理器插件

sudo dpkg -i session-manager-plugin.deb

确认会话管理插件。

session-manager-plugin

ⅲ. 安装 Terraform

①. 仓库克隆

git clone https://github.com/tfutils/tfenv.git ~/.tfenv

将路径添加到仓库

cat << 'EOS' >> ~/.bashrc

export PATH="$PATH:$HOME/.tfenv/bin"

EOS
source ~/.bashrc

③. 安装tfenv

tfenv install

④. 启用命令的标签存储。

terraform -install-autocomplete

ⅳ. 安装 git-secrets

①. 克隆存储库

git clone https://github.com/awslabs/git-secrets.git ~/.git-secrets

2. 安装 git-secrets

cd ~/.git-secrets/ && sudo make install

③. 将 git-secrets 配置为适用于AWS。

git secrets --register-aws --global

④. Git的自定义

git secrets --install ~/.git-templates/git-secrets
git config --global init.templatedir '~/.git-templates/git-secrets'

2. 创建Terraform仓库 (CJIAAN)

在master分支上,创建Terraform仓库。
创建完成后,要创建用于资源构建管理的分支,例如v1.0.0/stage和v1.0.0/prod。
以后,主分支将用于管理与整体相关的更改。
下面是我创建的Terraform仓库的目录结构示例,用于将Laravel应用部署到AWS Fargate。

.
├── README.md
├── .terraform-version                      --> Terraform実行時のバージョン指定
├── set_aws_profile.sh                      --> terraformコマンドを使用する事前準備
├── modules                                 --> Terraformで繰り返し使うモジュール
│   ├── alb_target_group
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── ecs_service
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── host_client_security_group
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── iam_role
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── route53_domain
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   ├── s3_log_bucket
│   │   ├── main.tf
│   │   ├── outputs.tf
│   │   └── variables.tf
│   └── security_group
│       ├── main.tf
│       ├── outputs.tf
│       └── variables.tf
├── operation                               --> アプリメンテ用リソース群
│   ├── .gitignore
│   ├── main.tf
│   ├── operation_setup.sh
│   ├── outputs.tf
│   ├── prod.tfbackend
│   ├── prod.tfvars
│   └── variables.tf
├── step0.sh                                --> 初期構築リソース群
├── step1                                   --> 第一段階構築リソース群
│   ├── .gitignore
│   ├── ecr_repository.tf
│   ├── lambda_iam_role.tf
│   ├── main.tf
│   ├── outputs.tf
│   ├── prod.tfbackend
│   ├── prod.tfvars
│   ├── rds_db.tf
│   ├── s3_buckets.tf
│   ├── ssm_parameters.tf
│   ├── ssm_parameters_setup.sh            --> センシティブな値を手動更新
│   ├── variables.tf
│   └── vpc_endpoint.tf
├── step2                                   --> 第二段階構築リソース群
│   ├── .gitignore
│   ├── ******(アプリ名など)_container.json
│   ├── ******(アプリ名など)_container_admin.json
│   ├── ******(アプリ名など)_container_camera.json
│   ├── main.tf
│   ├── outputs.tf
│   ├── prod.tfbackend
│   ├── prod.tfvars
│   └── variables.tf
├── git_cherry-pick_from_master.sh          --> masterブランチから各ブランチへのcherry-pick
├── terraform_apply.sh                      --> [terraform apply] コマンド実行用
└── terraform_destroy.sh                    --> [terraform destroy] コマンド実行用

在上述的目录结构中介绍与运营相关的内容。

ⅰ. .terraform版本

1.0.0

说明:用于在此存储库中执行terraform命令的Terraform版本指定文件。

ⅱ. 设置_aws_配置文件.sh

set -eu

echo 'デプロイ先:ステージング環境 or 本番環境を入力してください。'
read -p 'ex) stage/prod:' ENV

# ステージング環境 or 本番環境のプロファイルを設定
if [ ${ENV} = 'stage' ]; then
    export PS1="\[\e[1;36m\][fw-${ENV}]\[\e[0;39m\]${PS1}"
    export AWS_PROFILE=******(アプリ名など)-${ENV}
elif [ ${ENV} = 'prod' ]; then
    export PS1="\[\e[1;31m\][%%% fw-${ENV} %%%]\[\e[0;39m\]${PS1}"
    export AWS_PROFILE=******(アプリ名など)-${ENV}
else
    echo '[stage] or [prod] のどちらかを入力してください。'
fi

set +eu

说明:用于在执行terraform命令时设置AWS凭证信息的sh文件。

ⅲ. 步骤0.sh

set -eu

create_bucket () {
    # step1のTerraform状態管理S3バケット作成
    echo 'step1のTerraform状態管理S3バケット作成中...'
    aws s3api create-bucket --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --create-bucket-configuration LocationConstraint=ap-northeast-1
    aws s3api put-bucket-versioning --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --versioning-configuration Status=Enabled
    aws s3api put-bucket-encryption --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
    aws s3api put-public-access-block --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1 --public-access-block-configuration '{"BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true}'

    # operationのTerraform状態管理S3バケット作成
    echo 'operationのTerraform状態管理S3バケット作成中...'
    aws s3api create-bucket --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --create-bucket-configuration LocationConstraint=ap-northeast-1
    aws s3api put-bucket-versioning --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --versioning-configuration Status=Enabled
    aws s3api put-bucket-encryption --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
    aws s3api put-public-access-block --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation --public-access-block-configuration '{"BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true}'

    # step2のTerraform状態管理S3バケット作成
    echo 'step2のTerraform状態管理S3バケット作成中...'
    aws s3api create-bucket --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --create-bucket-configuration LocationConstraint=ap-northeast-1
    aws s3api put-bucket-versioning --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --versioning-configuration Status=Enabled
    aws s3api put-bucket-encryption --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'
    aws s3api put-public-access-block --bucket ******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2 --public-access-block-configuration '{"BlockPublicAcls": true, "IgnorePublicAcls": true, "BlockPublicPolicy": true, "RestrictPublicBuckets": true}'
}

# ステージング環境 or 本番環境でS3バケットの名前を切り替える
if [ ${AWS_PROFILE} = '******(アプリ名など)-stage' ]; then
    export S3_BUCKET_ENV=stage
    create_bucket
    echo '----- 全S3バケット作成完了 -----'
elif [ ${AWS_PROFILE} = '******(アプリ名など)-prod' ]; then
    export S3_BUCKET_ENV=prod
    create_bucket
    echo '----- 全S3バケット作成完了 -----'
else
    echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
fi

set +eu

说明:创建用于存储Terraform状态管理文件的S3存储桶的sh脚本。

ⅳ. 从主分支中挑选进行git cherry-pick的脚本

#!/bin/bash
set -eu

echo 'masterブランチでコミットをしていますか?'
read -p 'ex) y/n:' YN

# masterブランチでコミットをしているかを確認
if [ ${YN} = 'y' ]; then
    :
elif [ ${YN} = 'n' ]; then
    echo 'masterブランチでコミットをしてください。'
    exit 1
else
    echo '[y] or [n] のどちらかを入力してください。'
    exit 1
fi



# masterから、[v1.0.0/stage, v1.0.0/prod]それぞれへ、HEAD_commitをcherry-pick
git checkout master
GIT_MASTER_HEAD_COMMIT_HASH=`git rev-parse HEAD`

git checkout v1.0.0/stage
git cherry-pick ${GIT_MASTER_HEAD_COMMIT_HASH}

git checkout v1.0.0/prod
git cherry-pick ${GIT_MASTER_HEAD_COMMIT_HASH}

git checkout master

说明:用shell将master分支的HEAD_commit选择性地复制到stage和prod分支上。

ⅴ. 田野塑造应用.sh

#!/bin/bash
set -eu

# ステージング環境 and 本番環境でTerraform applyコマンドの定義
terraform_apply_stage () {
    cd ./${DEPLOY}
    terraform fmt
    terraform init -reconfigure
    terraform apply
    cd -
}

terraform_apply_prod () {
    cd ./${DEPLOY}
    terraform fmt
    terraform init -reconfigure -backend-config=prod.tfbackend
    terraform apply -var-file=prod.tfvars
    cd -
}



# [source set_aws_profile.sh] を実行し、デプロイ先を指定しているか確認
if [ ${AWS_PROFILE} = '******(アプリ名など)-stage' -o ${AWS_PROFILE} = '******(アプリ名など)-prod' ]; then
    :
else
    echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
    exit 1
fi



echo 'デプロイ先:ステージング環境 or 本番環境を入力してください。'
read -p 'ex) stage/prod:' ENV

# ステージング環境 or 本番環境でTerraform applyコマンドを切り替える
if [ ${ENV} = 'stage' ]; then
    git checkout v1.0.0/${ENV}
    echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
    read -p 'ex) step1/operation/step2:' DEPLOY

    # step1 をデプロイ
    if [ ${DEPLOY} = 'step1' ]; then
        terraform_apply_stage

    # operation をデプロイ
    elif [ ${DEPLOY} = 'operation' ]; then
        terraform_apply_stage

    # step2 をデプロイ
    elif [ ${DEPLOY} = 'step2' ]; then
        terraform_apply_stage

    else
        echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
    fi


elif [ ${ENV} = 'prod' ]; then
    git checkout v1.0.0/${ENV}
    echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
    read -p 'ex) step1/operation/step2:' DEPLOY

    # step1 をデプロイ
    if [ ${DEPLOY} = 'step1' ]; then
        terraform_apply_prod

    # operation をデプロイ
    elif [ ${DEPLOY} = 'operation' ]; then
        terraform_apply_prod

    # step2 をデプロイ
    elif [ ${DEPLOY} = 'step2' ]; then
        terraform_apply_prod

    else
        echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
    fi

else
    echo '[stage] or [prod] のどちらかを入力してください。'
fi

说明:[terraform apply] 命令是用于在不同的分期环境和生产环境中进行区分使用的sh。

ⅵ. 有形地毁灭脚本

#!/bin/bash
set -eu

# ステージング環境 and 本番環境でTerraform destroyコマンドの定義
terraform_destroy_stage () {
    cd ./${DEPLOY}
    terraform fmt
    terraform init -reconfigure
    terraform destroy
    cd -
}

terraform_destroy_prod () {
    cd ./${DEPLOY}
    terraform fmt
    terraform init -reconfigure -backend-config=prod.tfbackend
    terraform destroy -var-file=prod.tfvars
    cd -
}



# [source set_aws_profile.sh] を実行し、デプロイ先を指定しているか確認
if [ ${AWS_PROFILE} = '******(アプリ名など)-stage' -o ${AWS_PROFILE} = '******(アプリ名など)-prod' ]; then
    :
else
    echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
    exit 1
fi



echo 'デプロイ先:ステージング環境 or 本番環境を入力してください。'
read -p 'ex) stage/prod:' ENV

# ステージング環境 or 本番環境でTerraform destroyコマンドを切り替える
if [ ${ENV} = 'stage' ]; then
    git checkout v1.0.0/${ENV}
    echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
    read -p 'ex) step1/operation/step2:' DEPLOY

    # step1 をデプロイ
    if [ ${DEPLOY} = 'step1' ]; then
        terraform_destroy_stage

    # operation をデプロイ
    elif [ ${DEPLOY} = 'operation' ]; then
        terraform_destroy_stage

    # step2 をデプロイ
    elif [ ${DEPLOY} = 'step2' ]; then
        terraform_destroy_stage

    else
        echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
    fi


elif [ ${ENV} = 'prod' ]; then
    git checkout v1.0.0/${ENV}
    echo 'AWSリソース構築:step1 or operation or step2を入力してください。'
    read -p 'ex) step1/operation/step2:' DEPLOY

    # step1 をデプロイ
    if [ ${DEPLOY} = 'step1' ]; then
        terraform_destroy_prod

    # operation をデプロイ
    elif [ ${DEPLOY} = 'operation' ]; then
        terraform_destroy_prod

    # step2 をデプロイ
    elif [ ${DEPLOY} = 'step2' ]; then
        terraform_destroy_prod

    else
        echo '[step1] or [operation] or [step2] のいずれかを入力してください。'
    fi

else
    echo '[stage] or [prod] のどちらかを入力してください。'
fi

说明:在分别使用staging环境和production环境中执行[terraform destroy]命令的用途的shell脚本。

ⅶ. ssm_parameters_setup.sh:
SSM参数设置脚本。

#!/bin/bash
set -eu

echo 'LaravelのAPP_KEYを入力してください。'
read -p 'APP_KEY:' APP_KEY
echo 'RDSのDBマスターパスワードを入力してください。'
read -p 'DB_PASSWORD:' DB_PASSWORD

# AWSリソースに適用
aws ssm put-parameter --name '/******(アプリ名など)/app/key' --type SecureString --value "${APP_KEY}" --overwrite
aws ssm put-parameter --name '/******(アプリ名など)/db/password' --type SecureString --value "${DB_PASSWORD}" --overwrite
aws rds modify-db-instance --db-instance-identifier '******(アプリ名など)' --master-user-password "${DB_PASSWORD}"

说明:用于手动更新资源上的敏感值的sh脚本。

构建资源组的prod.tfbackend。

bucket = "******(アプリ名など)-prod-tfstate-step1"

说明:用于引用生产环境Terraform状态管理S3存储桶的文件。

ⅸ. 建立prod.tfvars的资源组

s3_bucket_env                  = "prod"
s3_force_destroy               = false
alb_enable_deletion_protection = true
db_name                        = "******(アプリ名など)Prod"
db_multi_az                    = true
db_deletion_protection         = true
db_skip_final_snapshot         = false
domain_name                    = "<test_domain_prod>"
domain_name_camera             = "<test_domain_prod_camera>"
domain_name_admin              = "<test_domain_prod_admin>"
ecr_mutability                 = "IMMUTABLE"

说明:用于搭建生产环境资源的参数文件。

ⅹ. 构建资源组的.gitignore

# ディレクトリ
/.terraform/

# ファイル
.terraform.lock.hcl
.terraform.tfstate.lock.info
terraform.tfstate
terraform.tfstate.backup

解释:为了防止terraform执行命令时自动创建的文件被包含在远程存储库中,请使用以下文件。

3. 关于运营操作的应用

以下是我为了将Laravel应用程序部署到AWS Fargate而创建的Terraform运维操作的介绍。为了简化操作步骤并最大程度地防止人为错误,这个配置变得有些笨拙的负责人是脚本。 (总有一天我想自己创建一个命令行工具)

开始构建AWS资源之前

    • 本リポジトリ直下で source set_aws_profile.sh を実行し

 

    • これからデプロイする環境を指定する。

AWSリソースの構築状態を管理するために必要なS3バケットを作成しておく。
(上記S3バケットの構築は、本リポジトリ直下へ移動し、source step0.sh )
テストドメインとして無料独自ドメインを取得しておく。(https://my.freenom.com/clientarea.php)
以下コード内のパラメータを確認する。

/step1/variables.tf のテストドメイン3種
(同ディレクトリ内の prod.tfvars も要変更)

/step2/prod.tfvars の ecs_docker_image_tag

ⅱ. AWS资源构建步骤

请注意,在执行以下命令之后,不要使用 [Ctrl + c] 强制终止。

Paraphrase: 本仓库下

bash terraform_apply.sh

②. AWS资源构建:步骤1

确认构建资源列表,是的。

④. 测试域名的名称服务器设置

当以下的输出被重复时,请进行设置。

module.route53_domain.aws_acm_certificate_validation.default: Still creating... [2m30s elapsed]

顺便提一下,要确认测试域名的NameServer设置是否正确,可以使用以下dig命令进行验证:
dig +trace 或者
dig @8.8.8.8 NS。
(验证SSL证书可能需要5至100分钟的时间。)

⑤. 通过以下命令,更改Laravel的APP_KEY值和RDS的DB主密码。

bash ./step1/ssm_parameters_setup.sh

将Docker镜像推送到ECR的私有存储库。

根据上述的1至3个步骤,进行AWS资源的构建操作。

8. 通过以下命令访问操作服务器的shell

aws ssm start-session --target <operation_instance_id>

在访问Shell后,执行以下步骤。

    1. sudo su –

 

    1. 执行docker_run.sh

 

    1. 执行php artisan migrate

 

    1. 执行php artisan db:seed –class=<使用的数据填充器>

按Ctrl + D键两次,退出登录。

在上述的1至3步骤中,AWS资源建立:第二步。

ⅲ. 测试域名变更步骤

    1. 将CNAME记录添加到目标DNS服务中,添加的数量取决于要迁移的测试域名数量。(例如:domain CNAME ALBhost)

 

    1. 使用dig命令确认设置是否生效。

 

    1. 分别更改ALB的HTTPS监听规则的主机条件。

 

    1. 在东京地区(ap-northeast-1)发行SSL通配符证书。

 

    1. 将生成的CNAME记录添加到目标DNS服务中,这是在发行SSL证书时生成的。

 

    在SSL证书验证完成后,更改ALB的HTTPS监听规则的默认SSL证书。

测试域名更改后,需要将标注为“※コメントアウト対象”的代码注释掉,然后执行 bash terraform_apply.sh(step1)。

ⅳ. AWS资源销毁步骤

    1. 在运行terraform_destroy.sh之前,先销毁与Lambda相关的资源。

运行terraform_destroy.sh -> 步骤2

运行terraform_destroy.sh -> 操作

运行terraform_destroy.sh -> 步骤1

ⅴ. 关于生产环境

以下是与 Staging 环境不同的几点:

    • S3バケットの名前

 

    • S3バケットの強制削除無効化

 

    • ALBの削除保護有効化

 

    • 本番環境用のDBインスタンスのDB名を使用

 

    • DBインスタンスのマルチAZ有効化

 

    • DBインスタンスの削除保護有効化

 

    • DBインスタンスのスナップショットスキップ無効化

 

    • 本番環境用のテストドメインを使用

 

    • ECRリポジトリのタグのイミュータビリティ有効化

 

    • 本番環境用のECSタスク定義で使用するDockerイメージタグ

 

    • ECSタスクで確保するvCPU、メモリ容量UP

 

    • ECSタスクの実行維持数が1→2

 

    ECSタスクの実行維持数の変化に伴う、ECSサービスの最小/最大ヘルス率の調整

ⅵ. 关于部署单位

作为规范,将AWS资源的部署单位分为以下几个部分。

step1 –> 各Appサーバの稼働に必要なベースとなるリソースを担当

VPC
ALB
Route 53 (テストドメイン用)
RDS
S3
パラメータストア
VPC Endpoint

operation –> AppサーバやDBのメンテナンスをするためのリソースを担当

オペレーションサーバ (EC2)
オペレーションログ
セッションマネージャ
(上記リソースに必要な) VPC Endpoint

step2 –> 各Appサーバのリソースを担当

Appサーバ (Fargate)
Cameraサーバ (Fargate)
Adminサーバ (Fargate)

ⅶ. 注意事项

    • DBのメンテナンスなどが終了し、オペレーションサーバが必要無くなったら

 

    • bash terraform_destroy.sh -> operation

 

    • (本番環境の場合、ログ用S3バケットが削除できないエラーが出力されるが、無視でOK)

 

    • 現在のAWSリソース構築状況を確認したい場合は

 

    • 確認したいディレクトリ直下で terraform show

コード編集後は、(編集したファイルのカレントディレクトリで)
terraform fmt でコードフォーマット。
(エディタのプラグインで、ファイル保存時に自動フォーマットする設定を導入するのがベスト)
AWSの各種リソースは、以下のS3バケットの terraform.tfstate で
それぞれ状態管理されている。
これらのバケットはバージョニング、暗号化、ブロックパブリックアクセスが設定されている。

******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step1
******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-operation
******(アプリ名など)-${S3_BUCKET_ENV}-tfstate-step2

Fargateの各コンテナへ以下コマンドでアクセスが可能。

aws ecs execute-command --cluster ******(アプリ名など) --task <タスクNo> --container <コンテナ名> --interactive --command "/bin/bash"

参考者

    • Terraform by HashiCorp

 

    • 実践Terraform AWSにおけるシステム設計とベストプラクティス

 

    • Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる

 

    git-secretsはじめました