在Windows系统的WSL上,通过Ubuntu来执行terraform

前提条件 (Qian ti tiao jian)

描述:Ubuntu 22.04.1 LTS

安装Terraform和Tfenv

本次我们将使用Tfenv来安装Terraform。

安装Tfenv

# unzipのインストール(tfenvでterraformをインストールするときにunzipがないと失敗します。)
$sudo apt-get install zip unzip

# tfenvをClone
$git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv

# Pathをに追加
$echo 'export PATH=$PATH:$HOME/.tfenv/bin' >> ~/.bashrc

# シンボリックリンクを追加
$ln -s ~/.tfenv/bin/* /usr/local/bin

使用Tfenv安装Terraform。

# 最新版をインストール(バージョンを指定する場合は`latest`の部分を変更してください)
$tfenv install latest

# インストールしたバージョンを表示
$tfenv list
  1.4.6
No default set. Set with 'tfenv use <version>'

# インストールしたバージョンを有効化
$tfenv use 1.4.6
Switching default version to v1.4.6
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.4.6

将Terraform配置访问AWS的设置

这次我们将使用切换角色而不是直接使用访问密钥。

创建IAM角色

从以下的CloudFormation模板中创建一个用于执行SwitchRole的IAM角色。

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  IAMUser:
    Type: "AWS::IAM::User"
    Properties:
      UserName: "CodeDeveloper"

  IAMUserPolicy:
    Type: "AWS::IAM::Policy"
    Properties:
      PolicyName: "CodeDeveloperAssumeRolePolicy"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Action: "sts:AssumeRole"
            Resource: !GetAtt SwitchRole.Arn
      Users:
        - Ref: "IAMUser"


  IAMUserAccessKey:
    Type: 'AWS::IAM::AccessKey'
    Properties:
      UserName: !Ref IAMUser
      
  SwitchRole:
    Type: "AWS::IAM::Role"
    Properties:
      RoleName: "SwitchRole"
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Principal:
              AWS:
                - !GetAtt IAMUser.Arn
            Action: "sts:AssumeRole"
  S3AccessPolicy:
    Type: "AWS::IAM::Policy"
    Properties:
      PolicyName: "S3AccessPolicy"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: "Allow"
            Action:
              - "s3:GetObject"
              - "s3:CreateBucket"
              - "s3:GetBucketPolicy"
              - "s3:PutBucketPolicy"
              - "s3:GetBucketAcl"
              - "s3:GetBucketCors"
              - "s3:PutBucketCors"
              - "s3:GetBucketVersioning"
              - "s3:GetBucketAcl"
              - "s3:PutBucketAcl"
              - "s3:GetAccelerateConfiguration"
              - "s3:GetBucketRequestPayment"
              - "s3:GetBucketLogging"
              - "s3:GetLifecycleConfiguration"
              - "s3:GetReplicationConfiguration"
              - "s3:GetEncryptionConfiguration"
              - "s3:GetBucketObjectLockConfiguration"
              - "s3:GetBucketWebsite"
              - "s3:PutBucketWebsite"
              - "s3:PutObject"
              - "s3:ListBucket"
              - "s3:ListAllMyBuckets"
              - "s3:DeleteObject"
              - "s3:DeleteBucket"
              - "s3:GetBucketTagging"
              - "s3:PutBucketTagging"
            Resource: "*"
      Roles:
        - Ref: "SwitchRole"

Outputs:
  AccessKeyId:
    Value: !Ref IAMUserAccessKey
    Description: IAM User Access Key ID

  SecretAccessKey:
    Value: !GetAtt IAMUserAccessKey.SecretAccessKey
    Description: IAM User Secret Access Key

  SwitchRoleArn:
    Value: !GetAtt SwitchRole.Arn
    Description: SwitchRole Arn

详细说明

image.png

使用AWS CLI创建连接配置文件。

请参考官方页面上Linux的步骤,安装AWS CLI。

 

    使用aws configure命令创建配置文件。您也可以直接通过vi ~/.aws/credentials修改凭证,没有问题。此次我们正在更改默认设置,但也可以选择其他设置。
aws configure --profile default
AWS Access Key ID : 
AWS Secret Access Key : 
Default region name : 
Default output format :

创建Terraform模板

创建一个用于创建S3 Bucket的Terraform模板。

    1. 标明连接信息在providers.tf中。如果在之前的步骤中创建了一个非默认的配置文件,请在以下的profile中指定所创建的配置文件名。

 

    1. providers.tf

 

    1. provider “aws” {

 

    1. region = “ap-northeast-1”

 

    1. assume_role {

 

    1. role_arn = “arn:aws:iam:::role/SwitchRole”

 

    1. }

 

    1. profile = “default”

 

    1. }

在main.tf中标明S3的创建信息。本次没有指定Backend或者required_version等。
# 创建s3 bucket
resource “aws_s3_bucket” “my_bucket” {
bucket = “my-bucket-da0s9uf08ua083u”

tags = {
Name = “My bucket”
Environment = “Dev”
}
}

执行Terraform

按照顺序执行 terraform 的 init、plan 和 apply 命令,创建 S3 存储桶。

terraform init
terraform plan
terraform apply

确认已创建S3存储桶。

我們將使用管理控制台進入S3,並確認是否已建立存儲桶。

image.png

删除已创建的S3存储桶。

最后,删除该次创建的S3存储桶以完成工作。

terraform destroy

请提供下列材料的中文同义句。只需要一个选项:

请提供中文参考。

    • tfenv(github)_manualインストール手順

 

    • Amazon S3 のアクション、リソース、条件キー

 

    • Terraform用のAWSアクセスキーの権限管理を、スイッチロール形式で最適化する方法

 

    TerraformDocument リソース: aws_s3_bucket
广告
将在 10 秒后关闭
bannerAds