CloudShellでaws-cliコマンドを打つ

technologies

もくじ

はじめに

こんにちは。中村です。

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 リファレンスとかでググればすぐ出てきますね

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を使う時はだいたいこんな感じでやっております
コマンドを書くことや、コマンドリファレンスを参照することは、繰り返していけば慣れていくのではないかと思います

それではまた!

Related posts