📝

AWS CLIハンズオンしてみた

2023/07/16に公開

AWSCLIとは

AWS のサービスを管理するための統合ツール。
簡単に言うとコードでAWSリソースの管理、作成ができる。
aws + コマンド + サブコマンド + パラメータの構成でできている。

事前準備

事前準備として何点かございますが、下記を参照ください
参照:CLI設定
アクセスキーシークレットキーの発行および、紐づけ終了しております。

構成図として下記のリソースをCLIで作成していきます。

※注意点としてALBはマルチAZの構成でないと紐づけができないので注意です

vpc作成

$ aws ec2 create-tags \
> --resources vpc-0a861ea14ec1a57a7 \
> --tags Key=Name,Value=test-vpc

tag付け

$ aws ec2 create-subnet \
> --vpc-id vpc-0a861ea14ec1a57a7 \
> --cidr-block 10.0.11.0/24 \
> --availability-zone ap-northeast-1a

サブネットA

$ aws ec2 create-subnet \
> --vpc-id vpc-0a861ea14ec1a57a7 \
> --cidr-block 10.0.11.0/24 \
> --availability-zone ap-northeast-1a

サブネットB※サブネットBは違うAZを指定してください

$ aws ec2 create-tags \
> --resources vpc-0a861ea14ec1a57a7 \
> --tags Key=Name,Value=test-vpc

サブネットAタグ付け

$ aws ec2 create-tags \
> --resources subnet-034bafd550d3bfc03 \
> --tags Key=Name,Value=subnetA

サブネットBタグ付け

$ aws ec2 create-tags \
> --resources subnet-0bb7c38f1dbf9358b \
> --tags Key=Name,Value=subnetB

自動でパブリックIPが割り当てられるように設定
サブネットA

$ aws ec2 modify-subnet-attribute \
> --subnet-id subnet-034bafd550d3bfc03 \
> --map-public-ip-on-launch

IGW作成

$ aws ec2 create-internet-gateway

vpcにアタッチ
※作成したvpcidなどは控えておくと作成しやすい

$ aws ec2 attach-internet-gateway \
> --internet-gateway-id igw-07b60753d17f91d2c \
> --vpc-id vpc-0a861ea14ec1a57a7

ルートテーブル作成&IGW紐づけ

$ aws ec2 create-route \
> --route-table-id rtb-03ad3801482963a0b \
> --destination-cidr-block 0.0.0.0/0 \
> --gateway-id igw-07b60753d17f91d2c

SG作成

$ aws ec2 create-route \
> --route-table-id rtb-03ad3801482963a0b \
> --destination-cidr-block 0.0.0.0/0 \
> --gateway-id igw-07b60753d17f91d2c

SGタグ付け

$ aws ec2 create-tags \
> --resources sg-0e610aecaa4a7456a \
> --tags Key=Name,Value=test-sg

インバウンドルール作成
※今回は接続とかは考えてないのでport22だけ解放

$ aws ec2 authorize-security-group-ingress \
> --group-id sg-0e610aecaa4a7456a \
> --protocol tcp \
> --port 22 \
> --cidr 0.0.0.0/0

ec2作成

$ aws ec2 run-instances \
> --image-id ami-0f9816f78187c68fb \
> --security-group-ids sg-0e610aecaa4a7456a \
> --subnet-id subnet-034bafd550d3bfc03 \
> --count 1 \
> --instance-type t2.micro \
> --key-name test-key \
> --query 'Instances[0].InstanceId' \
> --associate-public-ip-address

※料金がかからないように一旦停止

$ aws ec2 stop-instances \
> --instance-ids i-09e7630f66b8b094a

ALB作成

$ aws elbv2 create-load-balancer \
> --name test-load-balancer \
> --subnets subnet-034bafd550d3bfc03 subnet-0bb7c38f1dbf9358b \
> --security-groups sg-0e610aecaa4a7456a

ターゲットグループ作成

aws elbv2 create-target-group \
--name test-targets \
--protocol HTTP \
--port 80 \
--vpc-id vpc-0a861ea14ec1a57a7 \
--ip-address-type ipv4

インスタンスをターゲットグループに紐づけ
※インスタンスを停止したままだと紐づけできない

aws elbv2 register-targets \
--target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:668491570827:targetgroup/test-targets/b3964474663b5333 \
--targets Id=i-09e7630f66b8b094a

ALBとターゲットグループを紐づけ

aws elbv2 register-targets \
--target-group-arn arn:aws:elasticloadbalancing:ap-northeast-1:668491570827:targetgroup/test-targets/b3964474663b5333 \
--targets Id=i-09e7630f66b8b094a

S3作成

$ aws s3 mb s3://test-ob-bukett

バケットポリシーは下記のように設定

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::582318560864:root"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::test-ob-bukett/alblog/AWSLogs/668491570827/*"
        }
    ]
}

アクセスログONに変更

$ aws elbv2 modify-load-balancer-attributes \
> --load-balancer-arn arn:aws:elasticloadbalancing:ap-northeast-1:668491570827:loadbalancer/app/test-load-balancer/dec13a869b3e6b2a \
> --attributes Key=access_logs.s3.enabled,Value=true Key=access_logs.s3.bucket,Value=test-ob-bukett

感想

作成自体のコマンドは問題なくできましたが、詳細的な設定変更が意外と手間をとりました。
ハンズオンでマーネージドコンソールから作成する手順など最低限の知識が必要かなと感じましたが、missがなくなるログとして残る検索など楽な点が多く今後は
CLIでリソースなど作成していこうと思います。

Discussion