🖥️

CloudShellでaws-cliコマンドを打ちまくる

2022/09/19に公開

お疲れ様です。 中村です。

awsの勉強をしていると、awsリソースをコンソール画面でポチポチ作るよりもaws-cliを使う方がいいよーと言われる事がよくあります。

今までzennで記事を書いてきました
こんなんとか
https://zenn.dev/nakam_aws/articles/1ccd870200ff59
こんなんとか
https://zenn.dev/nakam_aws/articles/46fcc003855aef
いずれもコンソールポチポチの手順を紹介しているので、当然UIのアプデが入れば記事の内容は劣化していく事になります。

なので、ぼくもaws-cliを積極的に活用したほうがいいんだろうなーと思うようになりました。

しかし、ローカルPCからaws-cliを叩くとなるとAWSへのアクセスキーが必要になり、そのアクセスキーが漏洩してしまってエラい事になるなんて話も聞きます。どうすればいいんだぁぁぁぁ
https://dev.classmethod.jp/articles/leak-accesskey-what-do-i-do/

そこで登場するのがCloudShellというサービス。コンソール画面で使えるブラウザベースのシェルです。
コンソールにログインしているIAMユーザーと同等の権限で、AWSリソースの操作ができます。

今回はこれを使ってaws-cliを叩いてみようと思います。

CloudShell起動

検索窓で「cloudshell」と検索、「CloudShell」をクリックする

CloudShellの紹介画面が出てきます。「Clode」をクリックする

こんな感じのターミナルっぽい画面が出てきますね

権限について

CloudShellで操作できる範囲は基本的にコンソールにログインしているIAMユーザーの権限となります。
AdministratorAccessであれば基本何でも出来ますね!

AWSリソースを作成してみる

さてCloudShellでAWS-CLIを使ってAWSリソースを作成してみましょう

AWS CLI コマンドリファレンス

コマンドの書き方を調べるときは以下を使います。aws cli リファレンスとかでググればすぐ出てきますね
https://docs.aws.amazon.com/ja_jp/cli/latest/index.html

リファレンス参照方法

基本英語になります。皆さん気合い入れていきましょうwww
まずサイトを開いたら、作成したいAWSサービス名をctrl + Fで探します。
今回はS3バケットを作ってみましょう。むむ。なんか複数あるな.....

S3バケットを作成したい場合は、どうやらs3apiを使うみたいですね
中を開くと、create-bucketというのがあります。これに違いない!!

ちなみにですが、一覧の他のコマンドを見る限り、削除系はdelete-xxxだったり、参照系はget-xxxで統一されてるようですね

create-bucketのページを開きましょう

さて、基本的にこれを見ながらコマンドを書いていく訳ですが、まず以下の数字の順番に書いていきます。


CloudShellに直接書いてもいいですが、まずはメモ帳に書いていくのがいいですかね。

aws s3api create-bucket

続いて、リファレンスのSynopsisの所までスクロールします。
ここでは、コマンド実行時に設定できるオプション(パラメータ?)が示されています。

基本的に四角カッコ[]で括られているものは任意。それ以外は必須となります。 ※例外アリ....
なので、ここでは最低でも--bucketは書かないといけません。

aws s3api create-bucket --bucket

さらに下へスクロールすると、各オプションの値として何を書くべきかが解説されています。
必須オプションの--bucketではS3バケット名を指定する必要があるようですね

ということで、バケット名を決めて追記します。S3バケット名はグローバルで一意にする必要があるので、日付でも入れときゃいいでしょう!

aws s3api create-bucket --bucket nakam-bucket-20220821

エラーが出てしまいました... ナゼダ

[cloudshell-user@ip-xx-xx-xx-xx ~]$ 
[cloudshell-user@ip-xx-xx-xx-xx ~]$ 
[cloudshell-user@ip-xx-xx-xx-xx ~]$ aws s3api create-bucket --bucket nakam_bucket_20220821

An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The unspecified location constraint is incompatible for the region specific endpoint this request was sent to.
[cloudshell-user@ip-xx-xx-xx-xx ~]$

調べてみると以下の記事が見つかりました。
https://qiita.com/eyuta/items/3f39536aae51cdf0d197
--create-bucket-configuration LocationConstraint=ap-northeast-1というオプションが必要なようです。
バージニアリージョンでCloudShellを実行した場合、こちらのオプションは不要で、バケットはバージニアに作成されるようです。
それ以外のリージョンに作成したい場合はLocationConstraint=[リージョン名]が必要。

という訳で、追記してコマンドを実行

aws s3api create-bucket --bucket nakam-bucket-20220821 \
--create-bucket-configuration LocationConstraint=ap-northeast-1

無事にコマンドが通りました。

[cloudshell-user@ip-xx-xx-xx-xx ~]$ 
[cloudshell-user@ip-xx-xx-xx-xx ~]$ aws s3api create-bucket --bucket nakam-bucket-20220821 \
> --create-bucket-configuration LocationConstraint=ap-northeast-1
{
    "Location": "http://nakam-bucket-20220821.s3.amazonaws.com/"
}
[cloudshell-user@ip-xx-xx-xx-xx ~]$

コンソール画面でも見てみましょう。 うんうん。作成されてますね。うんうん。

念の為、バージニアリージョンでは追加したオプションが不要なのか確認しました。
コンソールでバージニアリージョンに変更した上で、CloudShellを起動。コマンドも通り、バケット作成できました。

[cloudshell-user@ip-xx-xx-xx-xx ~]$ 
[cloudshell-user@ip-xx-xx-xx-xx ~]$ aws s3api create-bucket --bucket nakam-bucket-20220821-useast1
{
    "Location": "/nakam-bucket-20220821-useast1"
}
[cloudshell-user@ip-xx-xx-xx-xx ~]$ 

さいごに

何だか想定外の事がいろいろ起きましたが...
僕がAWS-CLIを使う時はだいたいこんな感じでやっております
コマンドを書くことや、コマンドリファレンスを参照することは、繰り返していけば慣れていくのではないかと思います

それではまた!

Discussion