从零开始!从创建AWS账户到使用Terraform创建EC2实例的实践过程

前提来自于希腊语中的“protheseos”,意为“倒置、提前”。

    • AWSとTerraformについて、ぐぐって 概要 が だいたい わかる程度の人が対象です

 

    • brewを使うのでmac前提です…。読み替えて頂ければ、windowsでも実現可能かと思われます

 

    Terraformを今日初めて触ったので勢いでやってる部分があります。誤りやアドバイスあればぜひコメントください!

请注意,由于执行本文所述内容可能导致诸如“收到大量付款请求!”等各种问题,本文不承担任何责任,请自行负责并执行!

在这里要做的事情 zuò de

    1. 创建AWS帐号,并在AWS上创建开发用户。

 

    使用开发用户,在Terraform中创建EC2实例。

来吧,让我们试试看!

1. 创建AWS账号并在AWS平台上创建开发用户。

创建AWS账户 AWS

如果您已经拥有AWS账号的话,可以跳过此步骤。

スクリーンショット 2019-07-26 2.32.54.png
    • クレジットカードの登録が必要になります

 

    • プランの選択はFreeで問題ありません

 

    英語で住所登録をするので、住所の英語変換サービスが便利です → JuDress

创建用于开发的用户

我們之前創建的AWS帳戶具有 root 權限,並不是用於日常使用。
因此,我們需要創建一個開發用戶並使用該戶進行開發工作。

创建一个开发者用户群组,并将该群组分配给开发者用户。

使用IAM创建用户组

スクリーンショット 2019-07-26 2.50.37.png
スクリーンショット_2019-07-26_2_53_18-2.png
スクリーンショット 2019-07-26 2.59.27.png
スクリーンショット 2019-07-26 3.08.26.png

最后是确认,所以直接进入“下一步”。

スクリーンショット_2019-07-26_3_09_49.png

使用IAM创建用户

スクリーンショット_2019-07-26_3_47_01.png
スクリーンショット 2019-07-26 3.21.56.png
スクリーンショット 2019-07-26 3.23.35.png

因為這次不需要添加標籤,所以不做任何操作直接進入”下一步”。
最後一個步驟是確認,直接創建用戶。

スクリーンショット_2019-07-26_3_27_51.png

请记下下面三个部分(用红线圈起来的地方),之后会用到。
下载cvs会很方便。

    • コンソールアクセスのurl

 

    • アクセスキーID

 

    シークレットアクセスキー

使用这些工具来对AWS进行外部操作
在GitHub上进行推送等操作非常危险,请务必保持他人无法知晓的状态。

让我们最后尝试访问控制台的URL!如果成功登录,第一阶段就完成了!

使用开发用用户,在Terraform中创建EC2实例。

使AWS CLI可用

在使用AWS时,我们将使用一个名为AWS CLI的命令行工具与AWS进行交互。
因此,我们将准备安装所需的Python pip等工具。
如果已经完成安装,可以跳过这一步。

安装Python

我使用pyenv。

$ brew install pyenv
$ pyenv install --list  | egrep '^[ ]+[23]\.[0-9\.]+$' | grep ' 3' | tail -n 1
$ pyenv install 3.7.4 # 最新をインストール
$ pyenv global 3.7.4
$ pyenv global 3.7.4
$ pyenv versions
  system
* 3.7.4 (set by /usr/local/var/pyenv/version)
$ python --version
Python 3.7.4

安装pip

我要用Python安装pip。

$ python -m pip install pip --upgrade
$ pip -V
pip 19.2.1 from /usr/local/var/pyenv/versions/3.7.4/lib/python3.7/site-packages/pip (python 3.7)

安装 AWS CLI

使用pip安装AWS CLI

$ sudo pip install awscli
$ aws --version
aws-cli/1.16.205 Python/3.7.4 Darwin/18.7.0 botocore/1.12.195
...

注册用于开发的AWS CLI用户

先前的「访问密钥ID」和「秘密访问密钥」将分别进行设置。

$ aws configure --profile terraform-test
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXX        # アクセスキー
AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYY # シークレットアクセスキー
Default region name [None]: ap-northeast-1         # デフォルトのリージョン:アジアパシフィック (東京)
Default output format [None]: json                 # とりあえずjson

确认设置

$ aws configure list --profile terraform-test
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile           terraform-test           manual    --profile
access_key     ****************XXXX shared-credentials-file
secret_key     ****************YYYY shared-credentials-file
    region           ap-northeast-1      config-file    ~/.aws/config

AWS CLI的准备工作已经完成!

使用Terraform创建实例。

安装Terraform

$ brew update
$ brew install terraform
$ terraform -v
Terraform v0.12.5
...

创建代码仓库

$ mkdir terraform-test
$ cd terraform-test
$ terraform init

创建.tf文件 un fichier .tf)

创建两个Ubuntu实例,并将其放置在terreform-test目录下,然后在该目录下创建以下两个文件:
GitHub – first-terraform

provider "aws" {
  profile = "terraform-test" # aws cliで設定したprofile
  version = "~> 2.0"
  region  = "ap-northeast-1" # リージョン:アジアパシフィック (東京)
}
resource "aws_instance" "sandbox" {
  count         = 2              # インスタンス数
  ami           = "ami-785c491f" # Ubuntu 16.04 LTS official ami
  instance_type = "t2.micro"     # インスタンスタイプ

  tags = {
    Name = "${format("sandbox-%02d", count.index + 1)}"
  }
}

干路深走

我們將確認這是在.tf中記載的內容

$ terraform plan
...
Terraform will perform the following actions:

  # aws_instance.sandbox[0] will be created
  + resource "aws_instance" "sandbox" {
      + ami                          = "ami-785c491f"
  ...

  # aws_instance.sandbox[1] will be created
  + resource "aws_instance" "sandbox" {
      + ami                          = "ami-785c491f"
  ...

Plan: 2 to add, 0 to change, 0 to destroy.
...

执行

根据在Dry Run中确认的内容,进行实例的生成。

$ terraform apply
...
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を入力

aws_instance.sandbox[0]: Creating...
aws_instance.sandbox[1]: Creating...
aws_instance.sandbox[1]: Still creating... [10s elapsed]
aws_instance.sandbox[0]: Still creating... [10s elapsed]
aws_instance.sandbox[0]: Still creating... [20s elapsed]
aws_instance.sandbox[1]: Still creating... [20s elapsed]
aws_instance.sandbox[0]: Creation complete after 23s [id=i-xxxxxxxxxxxxxxxxx]
aws_instance.sandbox[1]: Still creating... [30s elapsed]
aws_instance.sandbox[1]: Creation complete after 33s [id=i-xxxxxxxxxxxxxxxxx]

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

确认生成的实例

命令行

$ terraform show
# aws_instance.sandbox[0]:
resource "aws_instance" "sandbox" {
    ami                          = "ami-785c491f"
    ...

# aws_instance.sandbox[1]:
resource "aws_instance" "sandbox" {
    ami                          = "ami-785c491f"
    ...

AWS管理控制台

スクリーンショット 2019-07-26 4.21.25.png
スクリーンショット_2019-07-26_4_17_58.png

我们可以使用Terraform启动EC2实例!接下来,根据官方文档进行调整.tf文件。

删除实例

在云服务中,不使用实例而将其闲置不动可能会导致突然产生巨额费用的原因,非常危险。
因此,我们应该时常确保用于学习或不再使用的实例进行停止或删除。

$ terraform destroy
Terraform will perform the following actions:

  # aws_instance.sandbox[0] will be destroyed
  - resource "aws_instance" "sandbox" {
      - ami                          = "ami-785c491f" -> null
      ...

  # aws_instance.sandbox[1] will be destroyed
  - resource "aws_instance" "sandbox" {
      - ami                          = "ami-785c491f" -> null
      ...

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes # yesを入力

aws_instance.sandbox[0]: Destroying... [id=i-0f64c8ea558dcfb68]
aws_instance.sandbox[1]: Destroying... [id=i-063fb9265f57a867d]
aws_instance.sandbox[0]: Still destroying... [id=i-0f64c8ea558dcfb68, 10s elapsed]
aws_instance.sandbox[1]: Still destroying... [id=i-063fb9265f57a867d, 10s elapsed]
aws_instance.sandbox[0]: Still destroying... [id=i-0f64c8ea558dcfb68, 20s elapsed]
aws_instance.sandbox[1]: Still destroying... [id=i-063fb9265f57a867d, 20s elapsed]
aws_instance.sandbox[0]: Destruction complete after 30s
aws_instance.sandbox[1]: Still destroying... [id=i-063fb9265f57a867d, 31s elapsed]
aws_instance.sandbox[1]: Destruction complete after 31s

Destroy complete! Resources: 2 destroyed.

确认已删除的实例

命令行

$ terraform show
# 何も表示されない

AWS管理控制台

スクリーンショット_2019-07-26_4_28_01.png

最後

感谢您阅读至此!对我个人来说,我之前从未接触过Terraform,对AWS的计费方式和IAM也不太了解,这让我感到害怕。但是,我还是努力将其运行起来了。希望这篇文章能对想要了解Terraform的人有所帮助!

请看以下新闻报道。

    • 10分で理解するTerraform

 

    • AWSでチーム開発する際のIAMによるアカウント設定方法

 

    • AWS-CLIの初期設定のメモ

 

    AWS CLIで複数アカウントを利用する
广告
将在 10 秒后关闭
bannerAds