publi sh SNS-сообщение от лямбда-функции (Java время выполнения) - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь опубликовать sh сообщение для SNS topi c из моей java лямбда-функции, но время ожидания истекло. Я получил необходимые данные из логики c, которую я написал, но время ожидания при отправке данных в виде сообщения SNS. Я дал полный доступ к своей лямбда-функции для публикации сообщения sh SNS. Вот код.

AmazonSNS client = AmazonSNSClientBuilder.defaultClient();
String resultIs = "Testing Lambda";
final PublishRequest publishRequest = new PublishRequest("my_SNS_Topic_ARN", resultIs, "Testing email");
logger.log(" publishing message ");
//it's timing out here
final PublishResult publishResponse = client.publish(publishRequest);

Я также пытался построить клиент SNS, как это, но он не работал.

AmazonSNSClientBuilder builder = AmazonSNSClientBuilder.standard().withCredentials(new DefaultAWSCredentialsProviderChain());
builder.setRegion(System.getenv("Region"));
AmazonSNS amazonSNS = builder.build();

Нужно ли предоставлять учетные данные? Есть ли простой способ построить клиент и опубликовать sh в SNS topi c из функции лямбда java.

Я тоже пробовал этот способ, как и предлагалось, истекло время ожидания.

AmazonSNS client = AmazonSNSClientBuilder.standard().build();
client.publish("arn:aws:sns:***", "Test","Data");

Исключение после увеличения таймера до 1 минуты и использования кода выше.

tp.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:744)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:726)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:686)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:668)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:532)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:512)
at com.amazonaws.services.sns.AmazonSNSClient.doInvoke(AmazonSNSClient.java:2800)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2767)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2756)
at com.amazonaws.services.sns.AmazonSNSClient.executePublish(AmazonSNSClient.java:1974)
at com.amazonaws.services.sns.AmazonSNSClient.publish(AmazonSNSClient.java:1946)
at com.amazonaws.services.sns.AmazonSNSClient.publish(AmazonSNSClient.java:1991)
at jdbcsample.JDBCSample.getCurrentTime(JDBCSample.java:155)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
Caused by: org.apache.http.conn.ConnectTimeoutException: Connect to sns.us-east-1.amazonaws.com:443 [sns.us-east-1.amazonaws.com/52.46.136.210] failed: connect timed out
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:374)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.amazonaws.http.conn.ClientConnectionManagerFactory$Handler.invoke(ClientConnectionManagerFactory.java:76)
at com.amazonaws.http.conn.$Proxy3.connect(Unknown Source)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at com.amazonaws.http.apache.client.impl.SdkHttpClient.execute(SdkHttpClient.java:72)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1297)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1113)
... 18 more
Caused by: java.net.SocketTimeoutException: connect timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:368)
at com.amazonaws.http.conn.ssl.SdkTLSSocketFactory.connectSocket(SdkTLSSocketFactory.java:142)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
... 34 more

END RequestId: cc9a0689-2a17-4061-adab-10043366f2e6
REPORT RequestId: cc9a0689-2a17-4061-adab-10043366f2e6  Duration: 49021.54 ms    
Billed Duration: 49100 ms   Memory Size: 512 MB Max Memory Used: 139 MB Init 
Duration: 335.45 ms 

Ответы [ 3 ]

0 голосов
/ 22 января 2020

Если вы не увеличили время ожидания вашей лямбда-функции, возможно, стоит посмотреть. Значение по умолчанию составляет 3 секунды, но его можно увеличить до 15 минут.

0 голосов
/ 23 января 2020

Гарантировали ли вы, что ваша функция не была развернута внутри VPC enter image description here

и ваша SNS Topi c имеет правильную Политику доступа? (См. В консоли SNS)

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__default_statement_ID",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": [
        "SNS:GetTopicAttributes",
        "SNS:SetTopicAttributes",
        "SNS:AddPermission",
        "SNS:RemovePermission",
        "SNS:DeleteTopic",
        "SNS:Subscribe",
        "SNS:ListSubscriptionsByTopic",
        "SNS:Publish",
        "SNS:Receive"
      ],
      "Resource": "arn:aws:sns:eu-central-1:0xxxxxxxxxxxx:xxxxxxxxxx",
      "Condition": {
        "StringEquals": {
          "AWS:SourceOwner": "xxxxxxxxxxx"
        }
      }
    }
  ]
}
0 голосов
/ 22 января 2020

Для создания sns-клиента в лямбда-функции достаточно строки AmazonSNSClientBuilder.standard().build().

Убедитесь, что у роли выполнения лямбда-кода есть прикрепленная политика

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sns:Publish"
            ],
            "Resource": "arn:aws:sns:*:*:*"
        }
    ]
}

Скопируйте правильный арн для вашей топи c из консоли SNS. Если у вас нет Topi c, создайте его. enter image description here

enter image description here

Мой рабочий пример

AmazonSNS client = AmazonSNSClientBuilder.standard().build();
client.publish("arn:aws:sns:eu-central-1:0xxxxx:xxxxxx", "I'm a test message", "Test Message");
...