我尝试了在容器中使用Terraform的备忘录

我要做的事情

    • terraformを勉強したい

 

    • ただローカル環境をterraformインストールとかで汚したくない

 

    • そこでcontainer使って汚染されないように環境を作ろうと思い立った

 

    全然よくわかってないけどついでにVSCode Remote Containerでファイルをいじれるようにしたい

前提 tí) is the Chinese translation for “premise” or “condition.”

    terraform, container, VSCode Remote Container全てにおいて初心者

我会按照顺序逐步记录所做的事情。

创建Terraform环境(从镜像开始的尝试)

为了构建一个能安装和运行Terraform的环境而创建DockerFile的调查。

    • 参考:Terraformの実行環境

Terraformの環境構築として、Homebrewでインストールする方法と、hashicorp/terraformのDockerイメージを使って実行する方法がある
おそらく既存のイメージを使う方法が一番簡単だと思うが、AWC CLIとかも全て含めてdocker上で環境を作りたいので、一旦Homebrewで一からインストールする方法を検討する

docker上でbrewできるように設定する

参考:Dockerfileで完結 CentOS8でlinuxbrewを使う方法

=> エラーになって無理だった。原因を調べている時間もないの 1つ目の参考の既存のイメージを用いる方法にする

创建一个可以从Terraform镜像启动的Docker文件。

    • 一旦動くか確認。この後、ここにAWS CLI等を入れて環境構築をするdocker fileを作る

FROM hashicorp/terraform:latest だけって感じ

安装VSCode Remote Container并进行上述docker文件的操作验证。

很抱歉,我无法回答您提供的问题,因为给出的文本为空白。如果您有其他问题或需要帮助,请告诉我。

暫時先創建一個DockerCompose。

    • 今回は不要と思うが常にComposeで作る癖をつけておく(必要ない?)

 

    • terraformとの相性が良くないのか(勉強不足)、compose経由だとcontainerが起動したままにできなかったので致し方なくDockerFile直でやる

Shell server terminated (code: 1, signal: null)

我在想,要在本地环境中安装AWS CLI和terraform,还是需要从头安装Docker容器吗?因此,我停下来考虑了一下。

    • 参考:docker-composeでTerraformのAWS構築環境を作成する 【AWS CLI 2対応】

zipで持ってきて解凍して使えるようにしている
これを見て頑張るのが良さそう

创建terraform环境并尝试创建EC2(通过dockerfile中的RUN命令努力进行环境构建操作)

    参考:docker-composeでTerraformのAWS構築環境を作成する 【AWS CLI 2対応】

安装AWS CLI

FROM ubuntu:20.04

# install comand.
RUN apt-get update && apt-get install -y less vim unzip curl sudo

# install awscli v2
# to see -> https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
    unzip awscliv2.zip && \
    sudo ./aws/install

确认安装已完成。

> # aws --version
> aws-cli/2.4.20 Python/3.8.8 Linux/5.10.76-linuxkit exe/x86_64.ubuntu.20 prompt/off

安装Terraform

在DockerFile的AWS CLI安装下方添加追加内容。

# install terraform
# to see -> https://learn.hashicorp.com/tutorials/terraform/install-cli
## check -> > terraform --version
RUN sudo apt-get update && apt-get install -y gnupg software-properties-common

RUN curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - &&\
    sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" && \
    sudo apt-get update && sudo apt-get install terraform

确认已经安装完成

# terraform --version
> Terraform v1.1.6
> on linux_amd64

设置凭证

    • AWSコンソールから「AdministratorAccess」ポリシーがアタッチされたアクセスキーの払い出し

参考:IAM ユーザーのアクセスキーの管理

右上のナビゲーションバーで[My Security Credentials (セキュリティ認証情報)] を選択
[新しいアクセスキーの作成] を選択
Access Key ID と Secret access key をメモ

環境変数を設定

ENV AWS_ACCESS_KEY_ID='xxxxx' \
    AWS_SECRET_ACCESS_KEY='xxxxx' \
    AWS_DEFAULT_REGION='ap-northeast-1' \
    AWS_DEFAULT_OUTPUT='json' 
    正しく設定されていることの確認。この時点でTerraformも設定したくれ電車るを認識してくれるらしい
# aws sts get-caller-identity
=> これでエラーになってなければOK

Terraform 代码实现

    DockerFileを配置しているフォルダが実行環境になっているのでそこにsrcファイルを作成し、以下ファイルをmain.tfファイルとして作成する
resource "aws_instance" "hello" {
    ami           = "ami-0701e21c502689c31"
    instance_type = "t2.micro"
}

provider "aws" {
    region = "ap-northeast-1"
}
    • resourceで、インスタンスを定義。amiにAmazonLinux2(ami-0701e21c502689c31)を設定

helloはリソースの名前。terraform内で一位に判別するための名前だと思う

providerで、クラウドプロバイダの設定を記述。省略可能だが、実行環境に依存せず実行できるので常に記述するべき

创建资源

    • 実装したファイルへ移動(cd src)

 

    • 初期化

terraformでは最初に初期化が必要

terraform init
> ...
> Terraform has been successfully initialized! # これが出たらOK
    • 実行内容の確認

ここではまだ作成しない。実行前に何が起こるか確認することが可能

terraform plan
> # aws_instance.hello will be created
>  + resource "aws_instance" "hello" {
>      + ami                                  = "ami-0701e21c502689c31"
>      + instance_type                        = "t2.micro"
>      + availability_zone                    = (known after apply)
>   (色々省略)
    • 実環境へ反映

planの内容に問題なければOK

terraform apply
・・・
> Plan: 1 to add, 0 to change, 0 to destroy.
>
> Do you want to perform these actions?
>   Terraform will perform the actions described above.
>   Only 'yes' will be accepted to approve.
> 
>   Enter a value: yes # これが表示されたらyesを入力
・・・
> Apply complete! Resources: 1 added, 0 changed, 0 destroyed. # これが出れば完了
    • AWSコンソールで確認する

定義したEC2ができていればOK

地球形成予測ツール「テラフォーム」オプション

    • コードフォーマット

terraform fmt -recursive

recursiveオプションをつけることでサブディレクトリ配下も実施される

よく使われるファイル名

main.tf

terraformの基本設定を記載する定義ファイル

variables.tf

変数を定義するファイル

outputs.tf

実行後に出力される変数を定義するファイル

リソース名.tf

ファイル名ごとにサービスを分けて定義するファイル(network.tfなど)