この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
こんにちは!協栄情報の陳です。
今日はALBのリスナールールを設定する時、バグみたいの事象が起きました。解決方法まで
メモします。
現象
一般的に、ALBリスナールールの最後-デフォルトアクションは、「固定レスポンスを返す」を選択して、Sorryページに設定することが多いです。今日は、レスポンスコードを編集すると、ルールが保存できない事象が起きました。
他のルールに「固定レスポンスを返す」を設定して、レスポンスコードも変更できません。
元々できることが急にできなくなって、構築中なので設計変更も不可能のため、他の設定方法がないかを調査しないといけません。
解決方法の調査
AWSはコンソールで各サービスの新規構築と設定変更などが大体できますが、「CLI」というコマンドラインインターフェースもよく利用されます。今回の事象は画面レベルのバグと思いますので、「CLI」で作業を実施してみたいです。
参考リンク:
https://awscli.amazonaws.com/v2/documentation/api/latest/reference/elbv2/modify-rule.html
先ずは一般ルールのレスポンスコードを変更する「CLI」を実行します。
$ aws elbv2 modify-rule \
$ --actions Type=fixed-response,FixedResponseConfig={"MessageBody=test,StatusCode=404,ContentType=text/html"} \
$ --rule-arn arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/3a4befbf420d0a9b
実行結果
{
"Rules": [
{
"RuleArn": "arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/3a4befbf420d0a9b",
"Priority": "2",
"Conditions": [
{
"Field": "path-pattern",
"Values": [
"/img/*"
],
"PathPatternConfig": {
"Values": [
"/img/*"
]
}
}
],
"Actions": [
{
"Type": "fixed-response",
"FixedResponseConfig": {
"MessageBody": "test",
"StatusCode": "404",
"ContentType": "text/html"
}
}
],
"IsDefault": false
}
]
}
コンソールで確認
次は作業対象のデフォルトルールを変更します。
$ aws elbv2 modify-rule \
$ --actions Type=fixed-response,FixedResponseConfig={"MessageBody=test,StatusCode=404,ContentType=text/html"} \
$ --rule-arn arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/5f75a5c86b047b13
実行結果
An error occurred (OperationNotPermitted) when calling the ModifyRule operation: Default rule 'arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener-rule/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3/5f75a5c86b047b13' cannot be modified
あれ、権限がなさそうですね。ちょっと確認します。
やばり不一致のところが多いですね。再度AWSの資料を確認して、回答を見つかりました。
「modify-listener」を利用して、もう一回試します。
$ aws elbv2 modify-listener \
$ --listener-arn arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3 \
$ --default-actions Type=fixed-response,FixedResponseConfig={"MessageBody=test,StatusCode=404,ContentType=text/html"}
実行結果
{
"Listeners": [
{
"ListenerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:listener/app/TEST-RESPONSE-CODE/41aad90ca6992d3e/cc9584fa70f41ff3",
"LoadBalancerArn": "arn:aws:elasticloadbalancing:ap-northeast-1:200047647217:loadbalancer/app/TEST-RESPONSE-CODE/41aad90ca6992d3e",
"Port": 80,
"Protocol": "HTTP",
"DefaultActions": [
{
"Type": "fixed-response",
"FixedResponseConfig": {
"MessageBody": "test",
"StatusCode": "404",
"ContentType": "text/html"
}
}
]
}
]
}
コンソールで確認
やっとできました。
最後に
仕事でこの事象のせい一時中止になってしまいましたが、問題が解決できてよかったです。それに、この調査のために多くの知識を勉強できました。AWS作業を効率化したければ、「CLI」が最強武器だと思います。