curl で AWS API を叩いてみた
AWS CLIやAWS SDKではなく直接AWSのAPIを叩きたい
こんにちは、のんピ(@non____97)です。
皆さんはAWS CLIやAWS SDKではなく、直接AWSのAPIを叩きたいなと思ったことはありますか? 私はあります。
AWSのAPIに対してアップデートがかかると、AWS CLI v1やboto3などでもアップデートの内容がすぐに反映される認識です。ただし、万が一AWS CLI v1やboto3などがアップデートになかなか追従できない場合は「早くアップデートブログを書きたいのに書けない」というもどかしい気持ちになること間違いなしです。
そんな時に備えて、直接AWS APIを叩けられるように整理しておきたいと思います。
いきなりまとめ
- curlで簡単にAWS APIを叩くことが可能
- AWS Signature V4にもサポートしているよ
AWS APIを直接叩く際はAWS Signature V4で署名が必要
AWS APIを直接叩く場合は、AWS Signature V4で署名が必要です。AWS CLIやAWS SDKの場合は意識する必要はありません。
重要
AWS SDK (「サンプルコードとライブラリ」を参照) または AWS コマンドライン (CLI) ツール を使用して API リクエストを AWS に送信する場合、SDK および CLI クライアントが指定したアクセスキーを使用してリクエストを認証するため、このセクションをスキップできます。正当な理由がない限り、常に SDK または CLI を使用することをお勧めします。
.
.
(中略)
.
.
リクエストに署名するタイミング
AWS に API リクエストを送信するためのカスタムコードを記述するときは、リクエストに署名するためのコードを含める必要があります。カスタムコードを書く理由には、以下のような場合が考えられます。
- AWS SDK がないプログラミング言語を使用しているためです。
- AWS にリクエストを送る方法を完全に管理する必要がある場合。
署名を作成するまでには複数のステップがあるため、さっとAPIを叩きたい時には手間です。
署名手順の概要
手順 1: 正規リクエストを作成する
リクエストのコンテンツ (ホスト、アクション、ヘッダーなど) を標準的な正規形式に変換します。正規リクエストは、署名する文字列を作成するのに使用される入力の 1 つです。詳細については、「AWS API リクエスト署名の要素」を参照してください。手順 2: 正規リクエストのハッシュを作成する
署名キーは、最初のハッシュオペレーションのキーとして AWS のシークレットアクセスキーを使用して、リクエスト日、リージョン、およびサービスに対する一連のキー付きハッシュオペレーション (HMAC オペレーション) を実行することによって抽出します。手順 2: 署名文字列を作成する
正規リクエストに加えてアルゴリズム、リクエスト日、認証情報スコープ、正規リクエストのダイジェスト (ハッシュ) などの追加情報を使用して、署名する文字列を作成します。手順 4: 署名を計算する
署名キーを取得したら、署名文字列にキー付きハッシュ操作を実行することで、署名を計算します。取得した署名キーを、この操作のハッシュキーとして使用します。手順 5: リクエストヘッダーに署名を追加します。
署名を計算したら、それをリクエストの HTTP ヘッダーまたはクエリ文字列に追加します。署名付き AWS API リクエストを作成する - AWS Identity and Access Management
そんな少しハードルが高めなAWS Signature V4ですが、curlではcurl 7.75.0から追加された--aws-sigv4
を使用することで、簡単にリクエストにAWS Signature V4の署名を付与することが可能です。
--aws-sigv4 <provider1[:provider2[:region[:service]]]>
Use AWS V4 signature authentication in the transfer.
The provider argument is a string that is used by the algorithm when creating outgoing authentication headers.
The region argument is a string that points to a geographic area of a resources collection (region-code) when the region name is omitted from the endpoint.
The service argument is a string that points to a function provided by a cloud (service-code) when the service name is omitted from the endpoint.
If --aws-sigv4 is provided several times, the last set value is used.
Example:
curl --aws-sigv4 "aws:amz:us-east-2:es" --user "key:secret" https://example.com
See also --basic and -u, --user. Added in 7.75.0.
これを使わない手はないですね。
やってみた
GET
実際にやってみます。
まず、GetFunctionを叩いてみます。
LambdaStack-LambdaD247545B-B3YfrxHrZ32g
というLambda関数の情報を取得します。
実行環境はCloudShellです。
# LambdaのFull Accessを持ったIAMロールにAssume Role
$ session=$(aws sts assume-role \
--role-arn arn:aws:iam::<AWSアカウントID>:role/LambdaFullAccess \
--role-session-name "role_session"
)
# 取得した認証情報をセット
$ aws_access_key_id=$(echo "${session}" | jq -r ".Credentials.AccessKeyId")
$ aws_secret_access_key=$(echo "${session}" | jq -r ".Credentials.SecretAccessKey")
$ aws_session_token=$(echo "${session}" | jq -r ".Credentials.SessionToken")
# アクセス先のリージョンとサービスをセット
$ region=us-east-1
$ service=lambda
# GetFunction を叩く
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
--aws-sigv4 "aws:amz:${region}:${service}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-vs \
| jq -r .
* Trying 44.192.250.55:443...
* Connected to lambda.us-east-1.amazonaws.com (44.192.250.55) port 443
* ALPN: curl offers h2,http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* CApath: none
{ [5 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [100 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4976 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN: server accepted h2
* Server certificate:
* subject: CN=lambda.us-east-1.amazonaws.com
* start date: Sep 24 00:00:00 2023 GMT
* expire date: Oct 21 23:59:59 2024 GMT
* subjectAltName: host "lambda.us-east-1.amazonaws.com" matched cert's "lambda.us-east-1.amazonaws.com"
* issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M01
* SSL certificate verify ok.
{ [5 bytes data]
* using HTTP/2
* Server auth using AWS_SIGV4 with user '<AWS Sigv4ユーザー>'
* [HTTP/2] [1] OPENED stream for https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: lambda.us-east-1.amazonaws.com]
* [HTTP/2] [1] [:path: /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g]
* [HTTP/2] [1] [authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名>]
* [HTTP/2] [1] [x-amz-date: 20231111T063959Z]
* [HTTP/2] [1] [user-agent: curl/8.3.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [x-amz-security-token: <セキュリティトークン>]
} [5 bytes data]
> GET /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g HTTP/2
> Host: lambda.us-east-1.amazonaws.com
> Authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名>
> X-Amz-Date: 20231111T063959Z
> User-Agent: curl/8.3.0
> Accept: */*
> X-Amz-Security-Token: <セキュリティトークン>
>
{ [5 bytes data]
< HTTP/2 200
< date: Sat, 11 Nov 2023 06:40:00 GMT
< content-type: application/json
< content-length: 3573
< x-amzn-requestid: 5c6c63b8-d788-4e68-9ece-6e08c84bd16a
<
{ [3573 bytes data]
* Connection #0 to host lambda.us-east-1.amazonaws.com left intact
{
"Configuration": {
"Description": "",
"TracingConfig": {
"Mode": "Active"
},
"VpcConfig": null,
"SigningJobArn": null,
"SnapStart": {
"OptimizationStatus": "Off",
"ApplyOn": "None"
},
"RevisionId": "12035d75-8318-4364-a4ab-100f5ba1760f",
"LastModified": "2023-11-10T04:17:51.000+0000",
"FileSystemConfigs": null,
"FunctionName": "LambdaStack-LambdaD247545B-B3YfrxHrZ32g",
"Runtime": "nodejs18.x",
"Version": "$LATEST",
"PackageType": "Zip",
"LastUpdateStatus": "Successful",
"Layers": null,
"FunctionArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g",
"KMSKeyArn": null,
"MemorySize": 128,
"ImageConfigResponse": null,
"LastUpdateStatusReason": null,
"DeadLetterConfig": null,
"Timeout": 10,
"Handler": "index.handler",
"CodeSha256": "WXtx07ODdA98WKBki+olSk/Qwh7Iw9FX2mcf0STZu+k=",
"Role": "arn:aws:iam::<AWSアカウントID>:role/LambdaStack-LambdaServiceRoleA8ED4D3B-CAYo4GRipcNH",
"SigningProfileVersionArn": null,
"MasterArn": null,
"RuntimeVersionConfig": {
"Error": null,
"RuntimeVersionArn": "arn:aws:lambda:us-east-1::runtime:5b65a6230d1054ba2f3bcff29fe7654ff1a5453cd2cfa1a03367a850c540a9da"
},
"CodeSize": 581,
"State": "Active",
"StateReason": null,
"Environment": {
"Variables": {
"AWS_NODEJS_CONNECTION_REUSE_ENABLED": "1"
},
"Error": null
},
"EphemeralStorage": {
"Size": 512
},
"StateReasonCode": null,
"LastUpdateStatusReasonCode": null,
"Architectures": [
"arm64"
]
},
"Concurrency": null,
"Code": {
"ResolvedImageUri": null,
"RepositoryType": "S3",
"ImageUri": null,
"Location": "<Lambda関数のコードのロケーション>"
},
"Tags": {
"aws:cloudformation:stack-name": "LambdaStack",
"aws:cloudformation:stack-id": "arn:aws:cloudformation:us-east-1:<AWSアカウントID>:stack/LambdaStack/ba9cb9e0-7f62-11ee-9786-0e7a74670299",
"aws:cloudformation:logical-id": "LambdaD247545B"
}
}
AWS Signature V4で署名がされ、Lambda関数の情報を取得できていますね。
--aws-sigv4
を付与しない場合は、以下のとおりです。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-vs \
| jq -r .
* Trying 44.192.248.42:443...
* Connected to lambda.us-east-1.amazonaws.com (44.192.248.42) port 443
* ALPN: curl offers h2,http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* CApath: none
{ [5 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [100 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4976 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN: server accepted h2
* Server certificate:
* subject: CN=lambda.us-east-1.amazonaws.com
* start date: Sep 24 00:00:00 2023 GMT
* expire date: Oct 21 23:59:59 2024 GMT
* subjectAltName: host "lambda.us-east-1.amazonaws.com" matched cert's "lambda.us-east-1.amazonaws.com"
* issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M01
* SSL certificate verify ok.
{ [5 bytes data]
* using HTTP/2
* Server auth using Basic with user '<Basic認証のユーザー>'
* [HTTP/2] [1] OPENED stream for https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g
* [HTTP/2] [1] [:method: GET]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: lambda.us-east-1.amazonaws.com]
* [HTTP/2] [1] [:path: /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g]
* [HTTP/2] [1] [authorization: Basic <Basic認証のクレデンシャル>]
* [HTTP/2] [1] [user-agent: curl/8.3.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [x-amz-security-token: <セキュリティトークン>]
} [5 bytes data]
> GET /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g HTTP/2
> Host: lambda.us-east-1.amazonaws.com
> Authorization: Basic <Basic認証のクレデンシャル>
> User-Agent: curl/8.3.0
> Accept: */*
> X-Amz-Security-Token: <セキュリティトークン>
>
{ [5 bytes data]
< HTTP/2 403
< date: Sat, 11 Nov 2023 06:59:54 GMT
< content-type: application/json
< content-length: 42
< x-amzn-requestid: 2662ec38-4704-45ba-bb6c-75dfc69f35ee
< x-amzn-errortype: MissingAuthenticationTokenException
<
{ [42 bytes data]
* Connection #0 to host lambda.us-east-1.amazonaws.com left intact
{
"message": "Missing Authentication Token"
}
Authorizationヘッダーに記載の認証方式がAWS4-HMAC-SHA256
ではなく、Basic
であることからBasic認証をしていることが分かります。そして、403エラーとなっていますね。
POST
次にPOSTでも試します。試すAPIはCreateAliasです。
リクエストパラメーターの定義は、人力でJSON文字列を作成するのではなく、JSONで定義したものをjqに渡してあげるとスマートだと思います。(catでも動作します)
実行結果は以下のとおりです。
# LambdaのFull Accessを持ったIAMロールにAssume Role
$ session=$(aws sts assume-role \
--role-arn arn:aws:iam::<AWSアカウントID>:role/LambdaFullAccess \
--role-session-name "role_session"
)
# 取得した認証情報をセット
$ aws_access_key_id=$(echo "${session}" | jq -r ".Credentials.AccessKeyId")
$ aws_secret_access_key=$(echo "${session}" | jq -r ".Credentials.SecretAccessKey")
$ aws_session_token=$(echo "${session}" | jq -r ".Credentials.SessionToken")
# アクセス先のリージョンとサービスをセット
$ region=us-east-1
$ service=lambda
# リクエストパラメーターを定義
$ request_parameters=$(jq -c . << 'EOF'
{
"Description": "alias test",
"FunctionVersion": "$LATEST",
"Name": "alias"
}
EOF
)
# CreateAlias を叩く
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
-H "content-type: application/json" \
--aws-sigv4 "aws:amz:${region}:${service}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-XPOST -d "${request_parameters}" \
-vs \
| jq -r .
* Trying 44.192.249.232:443...
* Connected to lambda.us-east-1.amazonaws.com (44.192.249.232) port 443
* ALPN: curl offers h2,http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
* CApath: none
{ [5 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [100 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4976 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN: server accepted h2
* Server certificate:
* subject: CN=lambda.us-east-1.amazonaws.com
* start date: Sep 24 00:00:00 2023 GMT
* expire date: Oct 21 23:59:59 2024 GMT
* subjectAltName: host "lambda.us-east-1.amazonaws.com" matched cert's "lambda.us-east-1.amazonaws.com"
* issuer: C=US; O=Amazon; CN=Amazon RSA 2048 M01
* SSL certificate verify ok.
{ [5 bytes data]
* using HTTP/2
* Server auth using AWS_SIGV4 with user '<AWS Sigv4ユーザー>'
* [HTTP/2] [1] OPENED stream for https://lambda.us-east-1.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases
* [HTTP/2] [1] [:method: POST]
* [HTTP/2] [1] [:scheme: https]
* [HTTP/2] [1] [:authority: lambda.us-east-1.amazonaws.com]
* [HTTP/2] [1] [:path: /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases]
* [HTTP/2] [1] [authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名>]
* [HTTP/2] [1] [x-amz-date: 20231111T080430Z]
* [HTTP/2] [1] [user-agent: curl/8.3.0]
* [HTTP/2] [1] [accept: */*]
* [HTTP/2] [1] [x-amz-security-token: <セキュリティトークン>]
* [HTTP/2] [1] [content-type: application/json]
* [HTTP/2] [1] [content-length: 71]
} [5 bytes data]
> POST /2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases HTTP/2
> Host: lambda.us-east-1.amazonaws.com
> Authorization: AWS4-HMAC-SHA256 Credential=<AWS Sigv4ユーザー>/20231111/us-east-1/lambda/aws4_request, SignedHeaders=content-type;host;x-amz-date;x-amz-security-token, Signature=<AWS Sigv4の署名>
> X-Amz-Date: 20231111T080430Z
> User-Agent: curl/8.3.0
> Accept: */*
> X-Amz-Security-Token: <セキュリティトークン>
> content-type: application/json
> Content-Length: 71
>
} [71 bytes data]
< HTTP/2 201
< date: Sat, 11 Nov 2023 08:04:30 GMT
< content-type: application/json
< content-length: 250
< x-amzn-requestid: 3e9ceef4-64d0-4010-8d21-144cb6d045a6
<
{ [250 bytes data]
* Connection #0 to host lambda.us-east-1.amazonaws.com left intact
{
"AliasArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g:alias",
"Description": "alias test",
"FunctionVersion": "$LATEST",
"Name": "alias",
"RevisionId": "04119442-a604-44d9-b6f1-09c8362312a8",
"RoutingConfig": null
}
リクエストが受け付けられたようですね。
GetAliasを叩いて確認します。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
--aws-sigv4 "aws:amz:${region}:${service}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-s \
| jq -r .
{
"Aliases": [
{
"AliasArn": "arn:aws:lambda:us-east-1:<AWSアカウントID>:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g:alias",
"Description": "alias test",
"FunctionVersion": "$LATEST",
"Name": "alias",
"RevisionId": "04119442-a604-44d9-b6f1-09c8362312a8",
"RoutingConfig": null
}
],
"NextMarker": null
}
確かにエイリアスが設定されていますね。
PUT
POSTが出来たらPUTも似たようなものですが試します。
UpdateAliasで先ほど作成したエイリアスの説明を更新します。
実行結果は以下のとおりです。
$ request_parameters=$(jq -c . << 'EOF'
{
"Description": "alias test 2",
"FunctionVersion": "$LATEST"
}
EOF
)
# UpdateAlias を叩く
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases/alias" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
-H "content-type: application/json" \
--aws-sigv4 "aws:amz:${region}:${service}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-XPUT -d "${request_parameters}" \
-s \
| jq -r .
{
"AliasArn": "arn:aws:lambda:us-east-1:984900217833:function:LambdaStack-LambdaD247545B-B3YfrxHrZ32g:alias",
"Description": "alias test 2",
"FunctionVersion": "$LATEST",
"Name": "alias",
"RevisionId": "017ed654-c15d-4da0-a183-9d8cc38e128d",
"RoutingConfig": null
}
エイリアスの更新ができました。
DELETE
最後にDeleteAliasでエイリアスを削除します。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases/alias" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
--aws-sigv4 "aws:amz:${region}:${service}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-XDELETE \
-s \
| jq -r .
特にエラーなく、実行完了しました。正常に実行された場合のレスポンスボディは空のようなので、これで問題ありません。
レスポンス要素
アクションが成功した場合、サービスは空の HTTP 本文を持つ HTTP 204 レスポンスを返します。
本当にエイリアスが削除されたのか確認します。
$ curl "https://${service}.${region}.amazonaws.com/2015-03-31/functions/LambdaStack-LambdaD247545B-B3YfrxHrZ32g/aliases" \
-H "X-Amz-Security-Token: ${aws_session_token}" \
--aws-sigv4 "aws:amz:${region}:${service}" \
--user "${aws_access_key_id}:${aws_secret_access_key}" \
-s \
| jq -r .
{
"Aliases": [],
"NextMarker": null
}
確かにエイリアスは削除されているようですね。
AWS APIを叩きたくてしょうがない時に
curl で AWS API を叩いてみました。
curlがAWS Signature V4をサポートしてくれているので手間なく実行することができました。
AWS CLIではなく、AWS APIを叩きたくてしょうがない時にはぜひ試してみてください。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!