CloudShellでaws-cliコマンドを打つ
もくじ
はじめに
こんにちは。中村です。
awsの勉強をしていると、awsリソースをコンソール画面でポチポチ作るよりもaws-cliを使う方がいいよーと言われる事がよくあります。
今まで色んな記事を書いてきました(と言っても主にLambdaですが…)
こんなのとか、
こんなのとか
いずれもコンソールポチポチの手順を紹介しているので、当然UIのアプデが入れば記事の内容は劣化していく事になります。
なので、ぼくもaws-cliを積極的に活用したほうがいいんだろうなーと思うようになりました。
しかし、ローカルPCからaws-cliを叩くとなるとAWSへのアクセスキーが必要になり、そのアクセスキーが漏洩してしまってエラい事になるなんて話も聞きます。どうすればいいんだぁぁぁぁ
アクセスキー/シークレットキーが漏洩してしまった!一体何をすればいいの?
そこで登場するのがCloudShellというサービス。コンソール画面で使えるブラウザベースのシェルです。
コンソールにログインしているIAMユーザーと同等の権限で、AWSリソースの操作ができます。
今回はこれを使ってaws-cliを叩いてみようと思います。
CloudShell起動
検索窓で「cloudshell」と検索、「CloudShell」をクリックする

もしくは、ターミナルアイコンをクリック

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

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

権限について
CloudShellで操作できる範囲は基本的にコンソールにログインしているIAMユーザーの権限となります。
「AdministratorAccess」であれば基本何でも出来ますね!
※ 何でも出来てしまうので、料金が高騰しないようご注意ください。

AWSリソースを作成してみる
さて、上記のLambda関数を修正して環境変数が使える状態にしようと思います。
AWS CLI コマンドリファレンス
コマンドの書き方を調べるときは以下を使います。aws cli リファレンス
とかでググればすぐ出てきますね
リファレンス参照方法
基本英語になります。皆さん気合い入れていきましょう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 ~]$
調べてみると以下の記事が見つかりました。
【AWS CLI】ap-northeast-1でcreate-bucketした際にIllegalLocationConstraintExceptionがスローされた場合の対処法
--create-bucket-configuration '{"LocationConstraint":"ap-northeast-1"}'
というオプションが必要なようです。
※aws configureで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を使う時はだいたいこんな感じでやっております
コマンドを書くことや、コマンドリファレンスを参照することは、繰り返していけば慣れていくのではないかと思います
それではまた!