AWS CLIで Web サイトを構築、管理、運用する(最終日)

25日目！最終日！

本日は、これまでの1日目～24日目までの内容を振り返っていきます。

# 1日目～4日目(Amazon S3 Web Hosting)
Amazon S3 の静的サイトホスティングの設定をご紹介しました。
S3 に関するコマンドは、オブジェクト操作周りが行える s3 コマンド、API を操作する s3api とユースケースを分けて構成されています。また cp や ls といった馴染み深いコマンドが設定されているので、単にオブジェクトを格納したり、取得したりする際に悩むことが少なくなっています。

# 5日目～12日目(Amazon CloudFront、AWS WAF など)
CDN のサービスである、Amazon CloudFront とWeb Application Firewall のサービスである AWS WAF をご紹介しました。
あわせて、独自ドメインの設定を通じて、Amazon Route53 や 証明書のサービスである AWS Certificate Manager(ACM) もご紹介しました。
今回は、ドメインの取得は別サービスで行いましたが、```route53domains register-domain``` コマンドで行うことができます。

# 13日目(Amazon CloudWatch メトリクス)
Web サイトのアクセス数(リクエスト数)を取得するために、Amazon CloudWatch メトリクスをご紹介しました。ちなみに、 ```cloudwatch put-metric-data``` コマンドを使うことでメトリクスを登録することもできます。 

# 14日目～18日目(ネットワーク、EC2、AutoScaling)
後半戦に入ってからは、馴染みのある Amazon EC2 や Amazon Virtual Private Cloud(VPC)、AutoScalingをご紹介しました。
マネージメントコンソールでウィザードに従えばポチポチっと数クリックで数分で EC2 インスタンスを起動させられますが、 AWS CLI であれば、ワンライナーで起動させることができます。

# 19日目(セッションマネージャー)
運用で必要になるサーバーへの接続を可能にするためにセッションマネージャーをご紹介しました。この環境では、 AutoScaling で起動してくる EC2 インスタンスはプライベートサブネットで稼働するため、VPC エンドポイントを用意しました。

# 20日目(Amazon CloudWatch Logs)
OS のログやアプリのログを CloudWatch Log で確認できるように、CloudWatch エージェントの設定を行いました。ログ監視サーバーや統合ログサーバーなどを CloudWatch Logs に集約できるものです。
ちなみに、 CloudWatch エージェントはログだけでなくメトリクス収集も行ってくれます。


# 21日目～22日目(AWS CodeCommit, AWS CodePipeline)
Web サイトなのでコンテンツのバージョン管理などをするために、リポジトリサービスの CodeCommit のご紹介や環境構築、登録したコンテンツをエンドユーザーに配信できるように自動処理してくれる CodePipeline のパイプラインを作成しました。

# 23日目～24日目(AWS Lambda, Amazon API Gateway)
そしてアドカレ最後として、サーバレス周りのキモになる API Gateway と Lambda 関数のご紹介と設定、構築を実施しました。
おまけに、Lambda の環境情報やストレージ情報など HTML で出力するコードを設定しました。

# この期間に実行したコマンド
全 80 種類のコマンドを実行、ご紹介しました。
普段の構築作業では、マネージメントコンソールやCloudFormationなどを使うことが多いですが、個々の API を見ていくことで、例えば、IAM ポリシーにどんなアクション許可が必要なのかが見えてくると思います。ということは、AWS CLIが動かないとか、Lambda関数が動かないといった際、「あ、このアクション許可が足りてないんだね」ってことがすぐにわかり、トラブルシューティングの迅速化にもつなげられると思います。

* acm describe-certificate
* acm request-certificate
* apigateway create-deployment
* apigateway create-rest-api
* apigateway get-resources
* apigateway put-integration
* apigateway put-integration-response
* apigateway put-method
* apigateway put-method-response
* apigateway test-invoke-method
* autoscaling create-auto-scaling-group
* autoscaling create-launch-configuration
* autoscaling update-auto-scaling-group
* cloudfront create-cloud-front-origin-access-identity
* cloudfront create-distribution
* cloudfront get-distribution-config
* cloudfront update-distribution
* cloudwatch get-metric-statistics
* codecommit create-repository
* codepipeline create-pipeline
* codepipeline get-pipeline-state
* ec2 associate-route-table
* ec2 attach-internet-gateway
* ec2 authorize-security-group
* ec2 authorize-security-group-egress
* ec2 authorize-security-group-ingress
* ec2 create-image
* ec2 create-internet-gateway
* ec2 create-route
* ec2 create-route-table
* ec2 create-security-group
* ec2 create-subnet
* ec2 create-vpc
* ec2 create-vpc-endpoint
* ec2 describe-instances
* ec2 modify-subnet-attribute
* ec2 revoke-security-group-egress
* ec2 run-instances
* ec2 terminate-instances
* elbv2 create-listener
* elbv2 create-load-balancer
* elbv2 create-target-group
* events put-rule
* events put-targets
* iam add-role-to-instance-profile
* iam attach-role-policy
* iam create-instance-profile
* iam create-policy
* iam create-role
* lambda add-permission
* lambda create-function
* lambda get-function
* lambda invoke
* logs describe-log-groups
* logs describe-log-streams
* route53 change-resource-record-sets
* route53 create-hosted-zone
* s3 cp
* s3 ls
* s3 website
* s3api create-bucket
* s3api delete-bucket-website
* s3api get-bucket-lifecycle-configuration
* s3api get-bucket-logging
* s3api get-bucket-policy
* s3api get-bucket-website
* s3api head-object
* s3api put-bucket-acl
* s3api put-bucket-lifecycle-configuration
* s3api put-bucket-logging
* s3api put-bucket-policy
* s3api put-object-acl
* s3api put-public-access-block
* ssm get-parameter
* ssm start-session
* ssm terminate-session
* wafv2 create-rule-group
* wafv2 create-web-acl
* wafv2 get-web-acl
* wafv2 update-web-acl

# 最後に
この一連のアドカレのように、一から AWS CLI で構築していくことは少ないかもしれません。

しかし、運用作業などで用いられる「運用手順書」や「作業手順書」といったものを作る際に、AWS CLI を使うことで、マネージメントコンソールのスクリーンショットべたべた手順書から脱却できるということです。

スクリーンショットべたべた手順書を作成したはよいが、ユーザーインターフェースの更新により作り直すといった経験ありませんか？わたしは何度もあります。

ぱっと見敷居は高いかもしれませんが、全体的な運用工数低減にもつなげられるので、AWS CLI と仲良くできるとよいと思いますよ。